1

我在 Eclipse Oxygen.1a(操作系统:Windows 10 Home edition 64-bit)上创建了一个 jar 文件。我项目的 JRE 是 jre1.8.0_152(64 位版本)。当我使用 Java 8 JRE 运行我的 jar 文件时,程序运行良好,但是当我使用 Java 9 JRE 时,我收到以下错误:

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils

当我执行时发生此错误java -jar myjarfile.jar使用 Java 9 JRE。

我嵌入了最新版本的Apache Commons Lang(在项目库中添加了commons-lang3-3.7.jar)并使用了最新的 Java 9 Runtime (jre9.0.1)。Apache 页面声明需要 Java 7.0+。
Java 9 和 Apache Commons 库之间是否存在不兼容问题?有什么办法可以解决这个问题?

更新
命令行包含(调试视图,右键单击并单击属性)

"C:\Program Files\Java\jre1.8.0_152\bin\javaw.exe" 
-agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:50317 
-Dfile.encoding=UTF-8 
-classpath "C:\Program Files\Java\jre1.8.0_152\lib\resources.jar;
C:\Program Files\Java\jre1.8.0_152\lib\rt.jar;
C:\Program Files\Java\jre1.8.0_152\lib\jsse.jar;
C:\Program Files\Java\jre1.8.0_152\lib\jce.jar;
C:\Program Files\Java\jre1.8.0_152\lib\charsets.jar;
C:\Program Files\Java\jre1.8.0_152\lib\jfr.jar;
C:\Program Files\Java\jre1.8.0_152\lib\ext\access-bridge-64.jar;
C:\Program Files\Java\jre1.8.0_152\lib\ext\cldrdata.jar;
C:\Program Files\Java\jre1.8.0_152\lib\ext\dnsns.jar;
C:\Program Files\Java\jre1.8.0_152\lib\ext\jaccess.jar;
C:\Program Files\Java\jre1.8.0_152\lib\ext\jfxrt.jar;
C:\Program Files\Java\jre1.8.0_152\lib\ext\localedata.jar;
C:\Program Files\Java\jre1.8.0_152\lib\ext\nashorn.jar;
C:\Program Files\Java\jre1.8.0_152\lib\ext\sunec.jar;
C:\Program Files\Java\jre1.8.0_152\lib\ext\sunjce_provider.jar;
C:\Program Files\Java\jre1.8.0_152\lib\ext\sunmscapi.jar;
C:\Program Files\Java\jre1.8.0_152\lib\ext\sunpkcs11.jar;
C:\Program Files\Java\jre1.8.0_152\lib\ext\zipfs.jar;
C:\my Java lab\Eclipse Oxygen\Workspaces\JNotifier\JNotifier\bin;
C:\my Java lab\Eclipse Oxygen\Workspaces\JNotifier\JNotifier\src\libPack\commons-lang3-3.7.jar" libPack.JCostCalculator

通过使用 Eclipse 导出 Runnable JAR 创建的 Jar 文件,使用以下设置:
可运行的 JAR 导出设置

第二次更新:我在另一个 Windows 10 pro 64 位系统和带有 Java 9 的 Ubuntu 16.04.3 LTS 上测试了我的 JAR,并且遇到了同样的问题。

4

1 回答 1

1

仔细考虑用户评论后终于找到了解决方案。当我选择“将所需的库提取到生成的 JAR ”而不是打包它们时,问题解决了。 在此处输入图像描述 现在我的 jar 文件可以在 Java 8 和 Java 9 JRE 上正常工作。在我的 Linux 和 Windows 站(32 位和 64 位)上对其进行了测试。

我认为问题的核心是 Java 9 JRE 无法检测 JAR 形式的 Apache Commons Lang 库(commons-lang3-3.7.jar)。当将 commons-lang3-3.7.jar 的内容提取到我的 JAR 中时,问题解决了!

于 2017-11-20T06:55:37.030 回答