2010-01-29 31 views
10

我想從螞蟻運行一個java任務。我試圖運行「org.apache.tools.ant.launch.Launcher」類。如果沒有指定任何類名,我會繼續收到「NoClassDefFoundError」。我也得到一個「ClassNotFoundException」以及顯示消息「無法找到主類:。程序將退出」。這裏的錯誤NoClassDefFoundError沒有任何類名

[java] Exception in thread "main" java.lang.NoClassDefFoundError: 
[java] Caused by: java.lang.ClassNotFoundException: 
[java] at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
[java] at java.security.AccessController.doPrivileged(Native Method) 
[java] at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
[java] at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
[java] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
[java] at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
[java] at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 
[java] Could not find the main class: . Program will exit. 
[java] Java Result: 1 

現在我試圖運行從螞蟻罐子螞蟻類的片斷,我specifiy哪裏該類文件駐留使用「classpathref」屬性的類路徑,但我仍然得到這個消息。我檢查了ant jar來檢查Manifest,並且正確指定了「main」類(它是「org.apache.tools.ant.launch.Launcher」)。我耗盡了所有資源。請幫忙 ! ! !

PS:我的環境是Eclipse的在Ubuntu 9.04

回答

0

從這一行:

[java] Could not find the main class: . Program will exit. 

它看起來好像你要調用的java.exe是找到一個.它需要一個類名。也許你試圖在命令行中指明類路徑,但是忽略前面的-cp-classpath標誌。

+0

這裏就是我在build.xml文件 Seagull 2010-01-29 00:27:32

+1

@Safder。也許你應該展示'webtest.lib'是如何定義的。 – 2010-01-29 12:34:14

1

這可能是一個誤導性錯誤,實際上並不涉及類路徑中缺少的類。如果您使用的是Tomcat,可能是因爲缺少$ CATALINA_BASE/conf中的conf文件。它可能也是錯誤配置的ant安裝,請檢查您的JAVA_HOME和ANT_HOME env變量或嘗試另一個ant安裝。

5

很可能您的類路徑配置錯誤。

在最低限度的CLASSPATH應包括:

  • 的ant.jar和螞蟻launcher.jar
  • 瓶/類的XML解析器
  • JDK的所需的jar/zip文件

(來自ant manual

此外,你似乎在當前重新啓動螞蟻目錄(執行相同的build.xml)。也許你會想要設置「dir」屬性。

1

螞蟻發射預計以下PARAMS

java -Dant.home=c:\ant org.apache.tools.ant.launch.Launcher [options] [target] 

我affraid我們不能繼續回答你,如果你不貼你的整個build.xml文件。

只是儘量給你的全樣本如下:

<java 
      classname="org.apache.tools.ant.launch.Launcher" 
      fork="true" 
      failonerror="true" 
      dir="${sub.builddir}" 
      timeout="4000000" 
      taskname="startAnt" 
    > 
     <classpath> 
      <pathelement location="${ant.home}/lib/ant-launcher.jar"/> 
     </classpath> 
     <arg value="-buildfile"/> 
     <arg file="${sub.buildfile}"/> 
     <arg value="-Dthis=this"/> 
     <arg value="-Dthat=that"/> 
     <arg value="-Dbasedir=${sub.builddir}"/> 
     <arg value="-Dthe.other=the.other"/> 
     <arg value="${sub.target}"/> 
</java> 

這將是非常有益的,爲您提供一個可能的誤解。

希望這有助於

Ernani

4

它看起來像Ant任務正試圖運行Java,而是以某種方式傳遞一個空字符串到JVM作爲類的名稱來運行。我可以得到相同的堆棧跟蹤,如果我直接引用的空字符串運行JVM:

 
C:\>java "" 
Exception in thread "main" java.lang.NoClassDefFoundError: 
Caused by: java.lang.ClassNotFoundException: 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
Could not find the main class: . Program will exit. 

(這是Windows版本,但我不認爲這使多大的差別。)

我只能建議跟進Alexander Pogrebnyak對akf答案的評論。或許webtest.lib屬性中有空格嗎?

此外,有沒有很好的理由直接通過java調用ant而不是使用ant任務?

0

如果有疑問,請調用ant -v並觀察所有變量聲明以及發送給Java的整個命令行。

某些類似路徑的數量急切地被評估,而另一些則被懶惰地評估。當我的Ant腳本打算創建一個將被以後的任務使用的jar時,我在使用前者時遇到了很多問題。然後,當我調用這個調用的時候,它已經從classpath中修剪掉了我的jar。

如果我不得不做出胡亂猜測,我敢打賭,你的命令行看起來是這樣的:

的Java ... -classpath org.apache.tools.ant.launch.Launcher

代替

的Java ... -classpath foo.jar中; bar.jar org.apache.tools.ant.launch.Launcher

像你預期

3

https://blogs.oracle.com/sreekanth/entry/java_lang_noclassdeffounderror_org_codehaus

java.lang.NoClassDefFoundError: org/codehaus/plexus/classworlds/launcher/Launcher 
By sreekanth on Nov 23, 2010 

最近,當我試圖運行一些Maven的腳本,我得到這個異常:

Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/plexus/classworlds/launcher/Launcher 

Caused by: java.lang.ClassNotFoundException: org.codehaus.plexus.classworlds.launcher.Launcher 
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 

Could not find the main class: org.codehaus.plexus.classworlds.launcher.Launcher. Program will exit. 

花一些時間來嘗試各種組合後,我發現,這是因爲我有兩個M2_HOME和M3_HOME設置在我的環境變量中。一旦我從環境變量中刪除了M2_HOME,我可以再次回到這個工作狀態。可能這會爲某個人節省一些時間。

0

我最近有類似的問題。罪魁禍首是java任務下的2個標籤,沒有設置它們的值,所以他們導致了2個空的命令參數,最後在命令行的2個空格中。 由於某些原因,Unix不能正確處理它。紅帽5和Ubuntu都顯示相同的錯誤。在Windows 7上是正常的。 將這些參數設置爲具有默認虛擬值可解決問題。