Java 9 JRE导致Java.lang.NoClassDefFoundError:org/apache/commons/lang3/StringUtils执行jar

Java 9 JRE导致Java.lang.NoClassDefFoundError:org/apache/commons/lang3/StringUtils执行jar,java,executable-jar,java-9,eclipse-oxygen,apache-commons-lang,Java,Executable Jar,Java 9,Eclipse Oxygen,Apache Commons Lang,我在EclipseOxygen.1a(OS:Windows10HomeEdition 64位)上创建了一个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/String

我在EclipseOxygen.1a(OS:Windows10HomeEdition 64位)上创建了一个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
当我使用Java9JRE执行java-jarmyjarfile.jar时,会发生此错误。

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

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

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


第二次更新:我在另一个Windows 10 pro 64位系统和使用Java 9的Ubuntu 16.04.3 LTS上测试了我的JAR,发现了同样的问题。

在仔细考虑用户评论后,终于找到了解决方案。当我选择“将所需库提取到生成的JAR中而不是打包它们时,问题就解决了。 现在,我的jar文件可以很好地与Java8和Java9JRE配合使用。 在我的Linux和Windows工作站(32位和64位)上测试了它


我认为问题的核心是Java9JRE无法检测JAR形式的ApacheCommonsLang库(Commons-lang3-3.7.JAR)。当commons-lang3-3.7.jar的内容被提取到我的jar中时,问题解决了

commons-lang3-3.7.jar在我这方面很好用。你能做到以下几点吗:1)运行你的应用程序,2)当它终止时,打开调试视图,右键单击并单击属性,3)从命令行复制所有内容并粘贴到问题的这里。我创建了一个jar文件,你是说使用Eclipse吗?你能分享一下你遵循的步骤吗?@ZhekaKozlov我更新了我的帖子。注释的最大字符数。@Zerthimon在命令行中,看起来不像是从JAR中运行的。而是从bin文件夹运行。@Zerthimon您的JAR是否包含
org.apache
包?你能检查一下吗?我怀疑这是JDK 9的问题,它听起来更像是Eclipse没有将commons-lang3.3.7.jar放在类路径上。在Eclipse环境之外尝试这一点会很有用,以查看是否可以复制该问题。@AlanBateman Eclipse Oxygen使用Java 9启动时存在许多问题,因此可能是一个Eclipse错误。我将使用NetBeans IDE 8.2复制此问题并发布结果。如果您怀疑有Eclipse错误,请在TIA报告。您的解决方法表明,类org.Eclipse.jdt.internal.jarinjarloader.jarrscloader在Java 9上可能没有完全正常工作,因此如果您报告错误,请包括NCDFE的堆栈跟踪,看看这门课是否真的涉及其中。
"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