【问题标题】:Java NoClassDefFoundError even with "Package required libraries"Java NoClassDefFoundError 即使是“打包所需的库”
【发布时间】:2017-08-01 07:49:36
【问题描述】:

我正在尝试将我的程序导出为可运行的 JAR,在 Eclipse 中一切运行良好。我检查了以下内容:

  • Java Build Path 下包含我的库中的所有 jar
  • Order and Export 下检查了它们
  • 导出时,我选择了Package required libraries into generated JAR
  • 当我打开生成的 JAR 时,我可以看到所有其他 3rd 方 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,但是我不想提取所有这些 3rd 方 JAR,有人可以告诉我在 Eclipse 中还缺少什么吗?

【问题讨论】:

    标签: java eclipse jar


    【解决方案1】:

    一般有三种选择:

    1. 创建 fat jar / uber jar - 一个 jar 文件,其中包含所有必需的依赖项,不仅通过编译,而且在运行时也需要这些依赖项。
    2. 仅使用您的特定文件创建“普通”jar,并在类路径中提供所有必需的依赖项。
    3. 介于两者之间:包括一些依赖项,在类路径中提供一些。 (虽然我觉得这有点奇怪。)

    在这种情况下,我使用 Gradle 的应用程序插件 (https://docs.gradle.org/current/userguide/application_plugin.htm) 创建胖 jar,Maven 也可以使用 (How can I create an executable JAR with dependencies using Maven?) 来实现。

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

    【讨论】:

      猜你喜欢
      • 2014-03-12
      • 1970-01-01
      • 2013-10-15
      • 2023-03-07
      • 2018-02-21
      • 2011-11-25
      • 2019-03-16
      • 2018-02-01
      • 1970-01-01
      相关资源
      最近更新 更多