Java NoClassDefFoundError尽管设置了类路径
我在获取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时做错了什么,似乎弄乱了查找机制。
任何帮助,高度赞赏。
回答:
虽然我确信我正确
的证据是对你进行设置。 JVM告诉你,你没有正确设置它。
你认为ref'classpath'指向了什么?你认为它的价值来自哪里?它们应该在Ant build.xml中定义,对吧?就像这样:
<path id="production.class.path"> <pathelement location="${production.classes}"/>
<pathelement location="${production.resources}"/>
<fileset dir="${production.lib}">
<include name="**/*.jar"/>
<exclude name="**/junit*.jar"/>
<exclude name="**/*test*.jar"/>
</fileset>
</path>
<path id="test.class.path">
<path refid="production.class.path"/>
<pathelement location="${test.classes}"/>
<pathelement location="${test.resources}"/>
<fileset dir="${test.lib}">
<include name="**/junit*.jar"/>
<include name="**/*test*.jar"/>
</fileset>
</path>
如果要创建一个可执行的JAR,你需要在清单中指定主类和类路径,如CoolBeans正确的评论中指出。第三方JAR位置必须与可执行JAR相关。您应该用可执行JAR打包它们,以便相对路径易于理解和理解。
回答:
类路径应该由
- 目录与类文件(在其适当的包目录)
- jar文件。
您无法将类路径指向jars目录。当运行一个应用服务器(例如Tomcat)时,情况会有所不同,它将为您加载一个目录中的jar。
回答:
我发现这种情况发生时,我指定都<classpath>
和jar="..."
在目标。我删除了jar="..."
,将.jar
放入<classpath>
列表中,然后运行。
以上是 Java NoClassDefFoundError尽管设置了类路径 的全部内容, 来源链接: utcz.com/qa/262815.html