Java NoClassDefFoundError 即使是 "Package required libraries"

标签 java eclipse jar

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

  • 将我的库中的所有 jar 包含在 Java 构建路径
  • 订单和导出下检查了所有内容
  • 导出时,我选择了将所需的库打包到生成的 JAR 中
  • 当我打开生成的 JAR 时,我可以看到所有其他第 3 方 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 工作的唯一其他方法是选择将所需的库提取到生成的 JAR,但是我不想提取所有这些 3rd 方 JAR,有人可以告诉我 Eclipse 中还缺少什么吗?

最佳答案

一般有以下三种选择:

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

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

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

关于Java NoClassDefFoundError 即使是 "Package required libraries",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42727327/

相关文章:

java - 具有 "my type"列的数据库表

java - 不通过thymeleaf显示css内容

java - 安卓事物 : How to install apk from device with pm install -r

java - 检查 Maven 版本

java - 使用 Gson,如何序列化映射中的空值而不是其他类中的空值?

android - ADT 插件在 Eclipse 中消失了

java - 在 Eclipse 编译期间在构建中嵌入 git-describe、日期和时间

java - Eclipse:项目无法引用自身

运行 jar 文件时出现 Java FileNotFoundException

android - 从 Android 库 (.jar) 调用 Activity ?