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打包它们,以便相对路径易于理解和理解。

回答:

类路径应该由

  1. 目录与类文件(在其适当的包目录)
  2. jar文件。

您无法将类路径指向jars目录。当运行一个应用服务器(例如Tomcat)时,情况会有所不同,它将为您加载一个目录中的jar。

回答:

我发现这种情况发生时,我指定都<classpath>jar="..."在目标。我删除了jar="...",将.jar放入<classpath>列表中,然后运行。

以上是 Java NoClassDefFoundError尽管设置了类路径 的全部内容, 来源链接: utcz.com/qa/262815.html

回到顶部