当前位置: 首页 > 知识库问答 >
问题:

Java NoClassDefoundError(即使带有“包所需库”)

竺鸿骞
2023-03-14

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

  • Java构建路径
  • 下包含我库中的所有JAR
  • 命令和导出
  • 下检查了它们
  • 导出时,我选择了将所需库打包到生成的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个答案

羊舌自强
2023-03-14

一般来说有三种选择:

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

对于这种情况,我使用Gradle的应用程序插件(https://docs.gradle.org/current/userguide/applicationplugin.htm)创建fat JAR,Maven也可以使用(如何使用Maven创建具有依赖项的可执行JAR?)。

 类似资料:
  • 问题内容: 设置:(1)员工表(employeeID,firstName,lastName) (1)鞋类表格(shoeID,Employee_employeeID,shoeName,shoeColor,shoeBrand) 我想选择Employee表中的所有行,即使在热靴表中没有匹配的EmployeeID(Employee_EmployeeID)仍然显示整个行。所需输出示例: 我已经尝试了许多不同

  • 问题内容: 我正在尝试使用gcc从Ubuntu上的编译简单的C示例。我必须用作gcc的参数以包含所需的库吗? 问题答案: 如果您使用,等获取库(相对于从源构建库),则仅安装软件包还是 _也_安装了获取头文件?Linux软件包通常将运行时库与编译时标头分开。这样,只需要库来满足动态链接的人就不必安装不需要的标头。但是,由于您要进行开发,因此需要这些标头,因此也需要该包。

  • 即将用Maven TestNG Selenium实现一个测试框架。 如何声明告诉TestNG运行所有测试的suite.xml?我尝试了所有这些都无济于事: 我需要用不同的参数指定不同的套件配置,但都运行所有测试。我能找到的每一个例子都清楚地列出了对我来说意义不到零的每个类或包。

  • 问题内容: 我正在尝试运行JavaFX程序,但遇到了一些困难。我不断收到错误消息“ :必须提供位置”。fxml文件与Application类位于同一软件包中。这是我非常简单的代码: 这是我的main.fxml文件的副本: 控制器类确实存在,并且位于fxml文件中指定的包中。我所有的名字都是正确的,也是我认为应该的位置。我想念什么?我确实尝试重命名我的fxml文件,以防这是一个名称问题。请帮忙。仅供

  • 我正在学习异步/等待,在阅读本文之后,不要阻塞异步代码 这是异步/等待适合于 IO 和 CPU 绑定的方法 我注意到@Stephen Cleary文章中的一个提示。 使用ConfigureAwait(false)避免死锁是一种危险的做法。您必须对阻塞代码调用的所有方法(包括所有第三方和第二方代码)的传递闭包中的每个等待使用ConfigureAwait(false)。使用ConfigureAwait

  • 问题内容: 我正在生成要显示在折线图中的数据。不幸的是,我无法弄清楚如何使上面的查询显示0来表示没有用户注册的日期。所以目前我的输出可能是这样的: 但是我想要的是 我目前确实有一个工作版本,该版本将MySQL结果存储到数组中,然后PHP循环遍历并填补空白。这似乎很混乱,我希望可以通过MySQL解决方案。我已经对该站点进行了很好的搜索,但是努力了解一些实现。有什么建议么? 问题答案: 您可以使用My