Java NoClassDefFoundError指向错误的类

Java NoClassDefFoundError指向错误的类,java,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/cli

我正在验证由几个独立模块组成的程序的安装。它们不是相互依赖的。我有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(未知源) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.net.URLClassLoader.findClass(未知源) 位于java.lang.ClassLoader.loadClass(未知源) 位于sun.misc.Launcher$AppClassLoader.loadClass(未知源) 位于java.lang.ClassLoader.loadClass(未知源) 位于java.lang.ClassLoader.loadClassInternal(未知源) 找不到主类:validator/client/StormDataXMLGenerator。程序将退出

清单文件将Orange列为正确的主类

主类:orange/client/orange


有人知道为什么会给我NoClassDefFoundError吗?提前谢谢

看起来,尽管您尽了最大努力,orange.jar和apple.jar中的代码之间还是存在一些相互依赖关系。如果您可以访问源代码,请查看orange.jar中所有类的
import
语句,看看它们是否引用了apple.jar中的任何内容

看起来,尽管您尽了最大努力,orange.jar和apple.jar中的代码之间还是存在一些相互依赖关系。如果您可以访问源代码,请查看orange.jar中所有类的
import
语句,看看它们是否引用了apple.jar中的任何内容

也许orange.client.orange依赖于orange.client.Apple?看起来您的主类已经加载,所以我猜其他类正在尝试引入
orange.client.Apple


或者java缺少一个香蕉:-)

也许orange.client.orange依赖于orange.client.Apple?看起来您的主类已经加载,所以我猜其他类正在尝试引入
orange.client.Apple


或者java缺少一根香蕉:-)

我不确定这是否是问题的原因,但你说你有什么问题

主类:orange/client/orange

我想应该是这样

主类:orange.client.orange


至少我看到的所有例子都是这样做的。

我不确定这是否是你问题的原因,但你说你有

主类:orange/client/orange

我想应该是这样

主类:orange.client.orange


至少我看到的所有示例都是这样做的。

Java有类路径的概念。您必须将apple.jar添加到类路径中,以便orange.jar可以找到这些苹果

按以下方式调用您的应用程序:

java -cp apple.jar -jar orange.jar

或者,您可以设置CLASSPATH环境变量。

Java有CLASSPATH的概念。您必须将apple.jar添加到类路径中,以便orange.jar可以找到这些苹果

按以下方式调用您的应用程序:

java -cp apple.jar -jar orange.jar

或者,您可以设置CLASSPATH环境变量。

validator.jar清单中的“Main Class”属性必须设置为“orange.client.Apple”。因此,该类不能是JAR的一部分。您可以尝试两件事:将该类添加到JAR文件中,或将该类添加到类路径中。

validator.JAR清单中的“Main class”属性必须设置为“orange.client.Apple”。因此,该类不能是JAR的一部分。您可以尝试两件事:将该类添加到您的JAR文件中,或将该类添加到您的类路径中。

谢谢您的回复!显然,用于创建JAR的build.xml存在问题。现在已修复:)

感谢所有回复!显然,用于创建JAR的build.xml存在问题。现在已经修复:)

实际上,-jar会导致java命令忽略-cp选项,因此“java-cpapple.jar-jarorange.jar”将无法工作。您需要在orange.jar清单的Class Path字段中指定apple.jar。实际上,-jar会导致java命令忽略-cp选项,因此“java-cp apple.jar-jar orange.jar”将不起作用。您需要在orange.jar清单的类路径字段中指定apple.jar。