简体   繁体   English

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

[英]Java 9 JRE causes java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils on jar execution

I created a jar file on Eclipse Oxygen.1a (OS:Windows 10 Home edition 64-bit). 我在Eclipse Oxygen.1a(OS:Windows 10 Home Edition 64位)上创建了一个jar文件。 My project's JRE is jre1.8.0_152(64-bit version). 我项目的JRE是jre1.8.0_152(64位版本)。 When I run my jar file using the Java 8 JRE, program works perfectly but when I use the Java 9 JRE I get the following error: 当我使用Java 8 JRE运行jar文件时,程序运行正常,但是当我使用Java 9 JRE时,出现以下错误:

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

This error occurs when I execute : java -jar myjarfile.jar using Java 9 JRE . 当我使用Java 9 JRE 执行 java -jar myjarfile.jar 时,会发生此错误

I embedded the latest version of Apache Commons Lang (added commons-lang3-3.7.jar in project libraries) and used the latest Java 9 Runtime (jre9.0.1). 我嵌入了最新版本的Apache Commons Lang (在项目库中添加了commons-lang3-3.7.jar ),并使用了最新的Java 9 Runtime(jre9.0.1)。 Apache page states that Java 7.0+ is required. Apache页面指出需要Java 7.0+。
Is there an incompatibility issue between Java 9 and Apache Commons libs? Java 9和Apache Commons库之间是否存在不兼容问题? Any way to solve this? 有什么办法解决这个问题?

Update : 更新
Command line contains (Debug view, right-click on and click Properties) 命令行包含(“调试”视图,右键单击并单击“属性”)

"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

Jar file created by exporting a Runnable JAR with Eclipse, using these settings: 通过使用以下设置通过Eclipse导出可运行的JAR创建的Jar文件:
可运行的JAR导出设置

Second update : I tested my JAR on an other Windows 10 pro 64-bit system and on Ubuntu 16.04.3 LTS with Java 9 and had the same problem. 第二次更新 :我在其他Windows 10专业版64位系统和具有Java 9的Ubuntu 16.04.3 LTS上测试了我的JAR,并遇到了相同的问题。

Solution finally found after careful consideration of user comments. 经过仔细考虑用户评论,终于找到了解决方案。 Problem solved when I selected " Extract required libraries into generated JAR " instead of Package them. 当我选择“将所需的库提取到生成的JAR中 ”而不是打包时,问题解决了。 在此处输入图片说明 Now my jar file work fine with Java 8 and Java 9 JRE. 现在,我的jar文件可以在Java 8和Java 9 JRE上正常工作。 Tested it on my Linux and Windows stations (32 and 64 bit). 在我的Linux和Windows工作站(32和64位)上进行了测试。

I believe the core of the problem was that Java 9 JRE wasn't able to detect Apache Commons Lang library in JAR form (commons-lang3-3.7.jar). 我相信问题的核心是Java 9 JRE无法检测到JAR格式的Apache Commons Lang库(commons-lang3-3.7.jar)。 When the contents of commons-lang3-3.7.jar where extracted into my JAR, problem solved! 当将commons-lang3-3.7.jar的内容提取到我的JAR中时,问题解决了!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.lang.NoClassDefFoundError:org / apache / commons / lang3 / ObjectUtils - java.lang.NoClassDefFoundError: org/apache/commons/lang3/ObjectUtils NoClassDefFoundError: org/apache/commons/lang3/StringUtils - NoClassDefFoundError: org/apache/commons/lang3/StringUtils Glassfish 4.12内部异常:java.lang.NoClassDefFoundError:org / apache / commons / lang3 / Validate - Glassfish 4.12 Internal Exception: java.lang.NoClassDefFoundError: org/apache/commons/lang3/Validate 线程“ AWT-EventQueue-0”中的异常java.lang.NoClassDefFoundError:org / apache / commons / lang3 / Validate - Exception in thread “AWT-EventQueue-0” java.lang.NoClassDefFoundError: org/apache/commons/lang3/Validate 线程“main”中的异常 java.lang.NoClassDefFoundError: org/apache/commons/lang3/ObjectUtils - Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang3/ObjectUtils java.lang.NoClassDefFoundError:部署Web应用程序时org / apache / commons / lang / StringUtils - java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils when deploying web application java.lang.NoClassDefFoundError:org / apache / commons / lang / text / StrLookup - java.lang.NoClassDefFoundError: org/apache/commons/lang/text/StrLookup java.lang.NoClassDefFoundError: org/apache/commons/lang/builder/CompareToBuilder - java.lang.NoClassDefFoundError: org/apache/commons/lang/builder/CompareToBuilder java.lang.NoClassDefFoundError:org.apache.commons.lang3.ArrayUtils - java.lang.NoClassDefFoundError: org.apache.commons.lang3.ArrayUtils java.lang.NoClassDefFoundError:org / apache / commons / lang / Validate - java.lang.NoClassDefFoundError: org/apache/commons/lang/Validate
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM