Java NoClassDefFoundError甚至包含"包所需的库"

时间:2017-03-10 20:39:00

标签: java eclipse jar

我试图将我的程序导出为可运行的JAR,Eclipse中的一切运行正常。我检查过以下内容:

  • Java Build Path
  • 下的我的图书馆中加入所有广告
  • Order and Export
  • 下查看了所有内容
  • 导出时,我选择了Package required libraries into generated JAR
  • 当我打开生成的JAR时,我可以看到所有其他第三方JAR都在根目录中

然而,当我运行可运行的JAR时,我得到以下内容:

java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at ca.carillon.jnlp.Launcher.<clinit>(Launcher.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javaws.Launcher.executeApplication(Unknown Source)
at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

让我的可运行JAR工作的另一种方法是选择Extract required libraries into generated JAR,但是我不想提取所有第三方JAR,有人可以告诉我还有什么其他的吗? Eclipse中缺少什么?

1 个答案:

答案 0 :(得分:0)

一般来说,有三种选择:

  1. 创建胖jar / uber jar - 一个包含所有必需依赖项的jar文件,不仅要传递编译,还要运行时需要这些。
  2. 仅使用特定文件创建“普通”jar,并在类路径中提供所有必需的依赖项。
  3. 介于两者之间:包含一些依赖项,在类路径中提供一些依赖项。 (虽然我认为这有点奇怪。)
  4. 在这种情况下,我使用Gradle的应用程序插件(https://docs.gradle.org/current/userguide/application_plugin.htm)创建胖罐,Maven也可以使用(How can I create an executable JAR with dependencies using Maven?)来创建。

    我建议切换到一些构建工具,因为它也会运行测试等。在IDE中创建一个jar是恕我直言,这绝对不是一个好主意,绝对不是长期解决方案。试试Gradle吧。这很简单。