运行时的ClassNotFoundException / NoDefFound,但是导入的类可以自己运行吗?

时间:2016-12-25 20:13:55

标签: java eclipse noclassdeffounderror classnotfoundexception

我试图将我创建的jar导入Eclipse中的项目。当尝试来自所谓的jar的任何调用时,我得到以下异常:

Exception in thread "main" java.lang.NoClassDefFoundError
Caused by: java.lang.ClassNotFoundException

我认为这是由于类在编译时出现,而不是在运行时执行。

问题是:当我自己运行jar(没有导入)时,它按预期工作,具有所有功能。但我现在需要它作为一个更大的jar的一部分,而不改变运行时类路径(没有改变原始项目)。

如何实现?

@Edit

未找到或未找到的类是来自FastUtil库的ByteList。     线程" main"中的例外情况java.lang.NoClassDefFoundError:it / unimi / dsi / fastutil / bytes / ByteList

它被导入另一个Jar,我们称之为MyJar.jar; MyJar.jar完全可以作为一个独立的jar运行,因为它的目的是成为一个库,它本身就可以运行。

情况是:当我将MyJar.jar导入另一个项目时,它不再工作,我无法在新项目中使用它的方法和类。

可以使用java -jar MyJar.jar从命令提示符运行MyJar.jar,它将打印它的测试页以显示它正在运行。

新项目编译,但是当它运行时,我得到了关于MyJar项目的类未找到的异常。

1 个答案:

答案 0 :(得分:0)

您可以使用Maven Assembly Plugin添加相关JAR中的所有类,否则无法在不将类添加到类路径的情况下加载类。

如果您不想使用Maven,请手动将所有需要的类添加到JAR中。