Java 9 JRE вызывает java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils при выполнении jar
Я создал файл jar на Eclipse Oxygen.1a (ОС:Windows 10 Home edition, 64-битная версия). JRE моего проекта - jre1.8.0_152(64-битная версия). Когда я запускаю свой jar-файл с использованием Java 8 JRE, программа работает отлично, но когда я использую 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
Jar-файл, созданный путем экспорта Runnable JAR с Eclipse, с использованием этих настроек:
Второе обновление: я протестировал JAR на другой 64-битной системе Windows 10 pro и на Ubuntu 16.04.3 LTS с Java 9, и у меня возникла та же проблема.
1 ответ
Решение наконец найдено после тщательного рассмотрения комментариев пользователей. Проблема решена, когда я выбрал "Извлечь необходимые библиотеки в сгенерированный JAR" вместо "Упаковать их". Теперь мой jar-файл отлично работает с Java 8 и Java 9 JRE. Протестировал его на своих станциях Linux и Windows (32 и 64 бит).
Я считаю, что суть проблемы заключалась в том, что Java 9 JRE не смог обнаружить библиотеку Apache Commons Lang в форме JAR (commons-lang3-3.7.jar). Когда содержимое файла commons-lang3-3.7.jar было извлечено в мой JAR-файл, проблема решена!