【发布时间】:2012-09-18 08:37:21
【问题描述】:
我收到以下NoClassDefFoundError,这很奇怪,因为该类已经存在于库 jar 中。
Exception in thread "main" java.lang.NoClassDefFoundError: abc/test/Test.java
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:795)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:144)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:382)
at java.net.URLClassLoader.access$100(URLClassLoader.java:75)
at java.net.URLClassLoader$1.run(URLClassLoader.java:294)
at java.net.URLClassLoader$1.run(URLClassLoader.java:288)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:287)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:327)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:795)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:144)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:382)
at java.net.URLClassLoader.access$100(URLClassLoader.java:75)
at java.net.URLClassLoader$1.run(URLClassLoader.java:294)
at java.net.URLClassLoader$1.run(URLClassLoader.java:288)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:287)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:327)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:432)
Caused by: java.lang.ClassNotFoundException: abc.test.Test
at java.net.URLClassLoader$1.run(URLClassLoader.java:299)
at java.net.URLClassLoader$1.run(URLClassLoader.java:288)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:287)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:327)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 25 more
这看起来无法找到导致异常的同一个类。
我还在 antbuild.xml 中包含了库路径,可以在下面进行验证。
<property name="deps" value="${lib}/abclib/abclib-test.jar"/>
<target name="dist" depends="compile">
<manifest file="${dist}/MANIFEST.MF">
<attribute name="Main-Class" value="xyz.test.TestConfiguration" />
<attribute name="Class-Path" value="${deps}"/>
</manifest>
<jar jarfile="${dist}/abc.jar" basedir="${build}/" manifest="${dist}/MANIFEST.MF" />
</target>
我迷路了,至少有人可以指导我应该看哪里或我可能做错了什么吗?
另外,有人可以抛出“异常”和“原因”。我不太明白他们两个有什么关系。
【问题讨论】:
-
如何开始您的应用程序?您能否将完整的控制台命令添加到您的问题中?
-
你是如何运行它的? (命令、目录树中的位置等)您得到
abc/test/test.java文本可能会很有趣。 -
lib属性的值是多少?为了在清单类路径中使用,它需要是相对路径(使用正斜杠),相对于主 JAR 文件的位置,而不是绝对路径(就像您从<property name="lib" location="lib"/>获得的那样)。我建议您考虑使用manifestclasspath任务将您的依赖类路径转换为正确的格式,以便在清单中使用。 -
@Andreas_D- 我正在使用带有一些其他参数的“java -jar mcon.jar”。另外,我正在从项目的根目录运行它。
-
@DaveNewton- 我已经更改了问题的类和包名称。它与“abc.test.Test”的类相同