2009-07-15 104 views
2

我想在Eclipse中編譯和運行一個簡單的Java類。編譯任務工作正常,並且由於我沒有指定目標文件夾,所以構建文件與源文件位於同一目錄中。哪一個是正確的,目前我需要的是學習如何使用main()方法來運行這個類。ClassNotFoundException與螞蟻的Java任務和類路徑

我已經使用類的完全限定域名(產品包名稱等)和單獨的類名試過,但我總是得到了java.lang.ClassNotFoundException

Buildfile: C:\Users....\build.xml 
    run: 
     [java] java.lang.NoClassDefFoundError: code/control/MyClass 
     [java] Caused by: java.lang.ClassNotFoundException: code.control.MyClass 
     [java]  at java.net.URLClassLoader$1.run(Unknown Source) 
     [java]  at java.security.AccessController.doPrivileged(Native Method) 
     [java]  at java.net.URLClassLoader.findClass(Unknown Source) 
     [java]  at java.lang.ClassLoader.loadClass(Unknown Source) 
     [java]  at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     [java]  at java.lang.ClassLoader.loadClass(Unknown Source) 
     [java]  at java.lang.ClassLoader.loadClassInternal(Unknown Source) 
     [java] Could not find the main class: code.control.MyClass. Program will exit. 
     [java] Exception in thread "main" 
     [java] Java Result: 1 
    compile: 
    default: 
    BUILD SUCCESSFUL 
Total time: 234 milliseconds 

下面,採取目標從我的build.xml文件:

<target name="default" depends="compile" description="learn"> 

</target> 

    <target name="compile" depends="run"> 
      <javac srcdir="src/" /> 
    </target> 

    <target name="run"> 
    <java classname="code.control.MyClass" fork="true"/> 
</target> 

我找不出爲什麼找不到類。 MyClass包含main()方法,因爲我沒有指定classpath,它應該查看當前目錄,這是src/right?

開發目錄是通常的Eclipse文件結構:

PROJECTNAME/src目錄/代碼/控制/ MyClass的

如果它是一個classpath的問題,我怎麼能解決這個問題?我總是有把握把它放在你的類路徑上的問題......如果有人能夠在螞蟻環境中提供一些類路徑的解釋,我會非常感激。

感謝您的任何幫助。螞蟻的版本是1.7.0

+0

注意ClassNotFoundExceptions和NoClassDefFoundErrors不是同義詞。 – akf 2009-07-15 06:00:36

+0

你有沒有注意到你的目標「編譯」取決於「運行」? 這樣跑將在編譯之前被稱爲... 修復: <目標名稱= 「編譯」> (...) <目標名稱= 「跑」 取決於= 「編譯」> (.. ) – 2010-02-17 13:33:54

回答

8

classpath是Java運行時查找.class文件的地方,類似於您的操作系統使用PATH變量查找可執行文件的方式。

試試這個在您的構建腳本:

<target name="run"> 
    <java fork="true" classname="code.control.MyClass"> 
     <classpath> 
      <path location="src/"/> 
     </classpath> 
    </java> 

有一個HelloWorld version for ant,通過建立一個Java程序與螞蟻散步。

+0

謝謝塞斯,那工作。只是想知道類路徑,不是在安裝Eclipse時自動設置的嗎?我知道我可以從命令行的任何目錄執行java -version。 我認爲這是自動處理的,但是當我需要在類路徑上「放些東西」時,我該怎麼做?希望我不會離開原來的問題。 再次感謝 – denchr 2009-07-15 11:01:19

4

你應該包括類路徑,例如

<java classpath="${bin}" classname="code.control.MyClass"> 

其中$ {bin}是您的輸出文件夾。

1

如下改變你的build.xml文件,並嘗試:

<target name="default" depends="run" description="learn"> 

</target> 

    <target name="compile" > 
      <javac srcdir="src/" /> 
    </target> 

    <target name="run" depends="compile"> 
    <java classname="code.control.MyClass" fork="true"/> 
</target>