NoClassDefFoundError指向错误的类

时间:2010-05-07 15:45:10

标签: java

我正在验证由几个单独模块组成的程序的安装。它们不是共同依赖的。我有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吗?提前谢谢!

6 个答案:

答案 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显然存在问题。它已经修复了:)