我在獲取Java應用程序在控制檯和/或Ant中運行時遇到了一些麻煩。 我知道很多開始的問題都與沒有設置或錯誤設置的類路徑有關,儘管我相當肯定我設置正確,所以我的搜索只能得到結果。Java NoClassDefFoundError儘管設置了類路徑
這裏是我的應用程序的一般設置: 類在包模型,視圖和控制器。 controller.Controller是具有主方法的類。我使用objectdb作爲我的JPA提供程序。
我正在使用Ant編譯我的應用程序。
編譯後,我可以從螞蟻用下面的腳本運行我的應用程序:
<target name="run" description="default build process">
<java fork="true" classname="${main-class}">
<classpath>
<path refid="classpath" />
</classpath>
</java>
</target>
,其中$ {主級}是controller.Controller和classpath由/ lib和/ DIST文件夾(應用程序jar文件編譯/ DIST)
現在,我嘗試了所有的.jar文件複製從/ lib和/ DIST到一個單獨的文件夾,並運行他們java -jar cooking.jar -cp .
導致
Exception in thread "main" java.lang.NoClassDefFoundError: javax/persistence/Persistence
at model.jpa.JPAModelFactory.<init>(JPAModelFactory.java:28)
at model.jpa.JPAModelFactory.<init>(JPAModelFactory.java:24)
at controller.Controller.<init>(Controller.java:59)
at controller.Controller.main(Controller.java:116)
Caused by: java.lang.ClassNotFoundException: javax.persistence.Persistence
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 4 more
於是,我就和螞蟻上面構建目標略微修改爲:
<target name="run2" description="default build process">
<java fork="true" jar="${dist.dir}/${ant.project.name}.jar">
<classpath>
<path refid="classpath" />
</classpath>
</java>
</target>
這會導致同樣的錯誤。我不明白爲什麼。
只是爲了通過直接指定主類測試,我試着在命令行中運行:java -cp . controller.Controller
由於某種原因,甚至無法定位類(它的存在,我證實了它):
Exception in thread "main" java.lang.NoClassDefFoundError: controller/Controller
Caused by: java.lang.ClassNotFoundException: controller.Controller
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: controller.Controller. Program will exit.
我已將JAVA_HOME設置爲我的JDK路徑,將CLASSPATH設置爲我的JRE的/ lib路徑。 操作系統是Windows 7 64位,Java版本爲1.6.0_25-B06
我兩件事情感到困惑: 一)爲什麼就是Java無法找到controller.Controller,即使它是存在於.jar文件和.jar文件在當前目錄中? b)我在使用-jar調用Java時做錯了什麼,似乎弄亂了查找機制。
任何幫助,高度讚賞。
你在Manifest.MF文件中看到什麼類路徑和Main-class條目? – CoolBeans 2011-05-28 20:48:42
Manifest-Version:1.0 Ant-Version:Apache Ant 1.7.1 創建人:20.0-b11(Sun Microsystems Inc.) 主要類:controller.Controller – Tobias 2011-05-29 15:24:24