我正在验证由几个单独模块组成的程序的安装。它们不是共同依赖的。我有apple.jar和orange.jar,它们放在同一个文件夹中,在同一个项目中开发,但是彼此独立运行。
运行apple.jar很好,但是orange.jar给了我一个指向apple.jar的NoClassDefFoundError。
/usr/java/jre1.6.0_14/bin/java -jar validator.jar
线程“main”中的异常java.lang.NoClassDefFoundError:orange / client / Apple 引起:java.lang.ClassNotFoundException:orange.client.Apple 在java.net.URLClassLoader $ 1.run(未知来源) 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) at java.lang.ClassLoader.loadClassInternal(Unknown Source) 找不到主类:validator / client / StormDataXMLGenerator。程序将退出。
清单文件将Orange列为正确的主类。
Main-Class:orange / client / Orange
有人知道为什么它会给我NoClassDefFoundError吗?提前谢谢!
答案 0 :(得分:2)
也许orange.client.Orange依赖于orange.client.Apple?看起来你的主类已经被加载了,所以我猜其他一些类试图引入orange.client.Apple
。
或许java缺少香蕉: - )
答案 1 :(得分:1)
我不确定这是否是你问题的原因,但你说你有
Main-Class:orange / client / Orange
我认为应该是
Main-Class:orange.client.Orange
至少这就是我见过的所有例子都是如此。
答案 2 :(得分:0)
看起来尽管你付出了最大的努力,但是在orange.jar和apple.jar中的代码之间存在一些相互依赖关系。如果您有权访问源代码,请查看orange.jar中所有类的import
语句,以查看它们是否引用了apple.jar中的任何内容。
答案 3 :(得分:0)
Java具有类路径的概念。您必须将apple.jar添加到类路径中,因此orange.jar可以找到苹果。
按照以下方式调用您的应用:
java -cp apple.jar -jar orange.jar
或者,您可以设置CLASSPATH环境变量。
答案 4 :(得分:0)
validator.jar清单中的“Main-Class”属性必须设置为“orange.client.Apple”。因此,该课程不得成为您的JAR的一部分。您可以尝试两件事:将该类添加到JAR文件中,或将该类添加到类路径中。
答案 5 :(得分:0)
感谢所有回复!用于创建jar的build.xml显然存在问题。它已经修复了:)