Дополнительно
Как разрешить java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException в Java 9
У меня есть код, использующий классы JAXB API, которые были предоставлены как часть JDK в Java 6/7/8. Когда я запускаю тот же код в Java 9, во время выполнения я получаю ошибки, указывающие на то, что классы JAXB не могут быть найдены.
Классы JAXB предоставлялись как часть JDK начиная с Java 6, так почему же Java 9 больше не может найти эти классы?
718
20
API JAXB считаются API Java EE и поэтому больше не содержатся в пути классов по умолчанию в Java SE 9. В Java 11 они полностью удалены из JDK.
Java 9 вводит понятия модулей, и по умолчанию на пути классов (или, скорее, на пути модулей) доступен агрегатный модуль
java.se
. Как следует из названия, агрегатный модульjava.se
не включает API Java EE, которые традиционно поставлялись с Java 6/7/8.К счастью, эти Java EE API, которые были предоставлены в JDK 6/7/8, все еще находятся в JDK, но они просто не включены в путь класса по умолчанию. Дополнительные API Java EE предоставляются в следующих модулях:
В моем случае (весна загрузки жиров банку), я просто добавить следующую строку в pom.xml.
Ни одно из этих решений работал для меня в последние JDK версии 9.0.1.
Я обнаружил, что этот список зависимостей вполне достаточно для нормального функционирования, так вы Дон'т нужна явно указать
- добавить-модуль
(хотя он указан в этих зависимостях'с пом'ы). Единственное, что вам нужно, это указать список зависимостей:Это сработало для меня:
Обновить
Как предложил @Jasper, чтобы не зависеть от всей библиотеки EclipseLink, вы также можете просто зависеть от EclipseLink MOXy:
Maven.
Градл
В качестве зависимостей для моего приложения Java 8, которое создает *.jar, который может быть запущен как JRE 8, так и JRE 9 без дополнительных аргументов.
Кроме того, он должен быть выполнен где-то перед тем, как будет использован JAXB API:
Пока что работает отлично, как обходной путь. Однако не похоже, что это идеальное решение...
это´s, потому что Java-версии если вы используете JDK версии 9 или более поздней версии, просто добавьте в вашей пом
чистое решение для всех пакетов JDK >= 9
Нужно добавить две зависимости для сборки
В качестве реализации я решил использовать эталонную реализацию на GlassFish для избавиться от старых ком.солнце классов / библиотек. Так что в результате я добавил в мой сборка
Обратите внимание, что начиная с версии 2.3.1 вас Дон'т нужно добавить класс javax.активации больше. (см. https://github.com/eclipse-ee4j/jaxb-ri/issues/1222)
Во время компиляции, а также во время выполнения добавьте переключатель
add-modules java.xml.bind
.Хорошее введение в модули
JDK 9
можно также найти на сайте : https://www.youtube.com/watch?v=KZfbRuvv5qcЧтобы решить эту проблему, я импортировал некоторые файлы Jar в моем проекте:
http://search.maven.org/remotecontent?filepath=com/sun/activation/javax.activation/1.2.0/javax.activation-1.2.0.jar
http://search.maven.org/remotecontent?filepath=javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar
http://search.maven.org/remotecontent?filepath=com/sun/xml/bind/jaxb-core/2.3.0/jaxb-core-2.3.0.jar
http://search.maven.org/remotecontent?filepath=com/sun/xml/bind/jaxb-impl/2.3.0/jaxb-impl-2.3.0.jar
Вы можете использовать `--добавление модулей=Ява.в формате XML.опцию JVM привязать, чтобы добавить модуль XML привязки к JVM во время выполнения окружающей среды.
Например:
Ява-добавить-модулей=Ява.в формате XML.связать XmlTestClass
Обновление За Апрель 2019
Changelong для релизов JAXB является в https://javaee.github.io/jaxb-v2/doc/user-guide/ch02.html
выдержки:
Авторитетная ссылка на https://github.com/eclipse-ee4j/jaxb-ri#maven-artifacts
орг.в GlassFish.на JAXB:в JAXB-время:опарник:2.3.2 тянет на:
Оригинальный Ответ
Следующим https://stackoverflow.com/questions/26413431/which-artifacts-should-i-use-for-jaxb-ri-in-my-maven-project в Maven, вы можете использовать профиль, как:
Зависимость показывает дерево:
Чтобы использовать это в Eclipse, скажем кислорода.Выпуск 3а (4.7.3) или позже, контрол-Альт-П, или щелкните правой кнопкой мыши на проекте Maven, а затем выберите профиль.
Этот работал для меня. Добавление только в JAXB-АПИ было'т достаточно.
Идут в сборку.Gradle и добавить ниже зависимостей для Java 9 или Java 10.
добавить к javax.в формате XML.зависимость связывания в pom.xml
Для Java веб-запуск выполнения можно использовать Энди Гибер's, как это предложение:
Обратите внимание на дополнительные, что "=" В-добавить-модулей. Вижу его теперь билет]1 или последняя нота в "понимание выполнения предупреждения доступ к" из платформы Java, стандартной редакции СУБД Oracle версии JDK 9 руководство по миграции.
Я столкнулся с такой же проблемой с использованием Spring загрузки 2.0.5.Релиз на Java 11.
Добавление
класса javax.в формате XML.персонализация:в JAXB-АФИ:2.3.0
в одиночку не решить проблему. Мне тоже пришлось обновить весенний ботинок на последний рубеж2.1.0.М2
, поэтому я предполагаю, что это будет исправлено в следующем официальном релизе.Я следовал этому URL и настройки внизу действительно помогло мне. Я использую Java 10 с СТС IDE в МасВоок Pro. Он работает как шарм.
Это решило мои проблемы с зависимостями запуск Apache верблюда 2.24.1 на Яве 12:
Не ответ, а дополнение: у меня ведь работает
groovysh
(Заводной 2.4.13) при переменной JAVA_HOME указывает на Ява 9 установка (Java-версии и"9.0.1"
В, чтобы быть точным) не более:Было принято решение:
Идите на проект в JAXB на GitHub.Ио ("в JAXB является лицензированной под двойной лицензией - 1.1 CDDL и GPL 2.0 с исключением и quot Путь к классу;)
Скачать jaxb-ri-2.3.0.zip`
Распаковать куда вы кладете файлы Java инфраструктуры (в моем случае,
/usr/местные/Ява/в JAXB-Ри/
). Другие решения могут существовать (возможно через SDKMAN, я Незнайка)Убедитесь, что банки в подкаталоге lib на
классов
. Я делаю это через скрипт стартовал при запуске Баш, под названием/etc/profile.d/java.sh
, где я добавил (среди многих других линий) следующий цикл:Упакованные в функцию...
И это работает!
Поскольку в JavaEE теперь регулируется https://jakarta.ee/ новый Мэйвен координаты пункта 2.3.2 являются:
https://github.com/eclipse-ee4j/jaxb-ri#maven-artifacts
Впервые выпущен в JAXB.версия 2.3.2.
ОК, у меня были те же проблемы, но я был с использованием Java 8, и продолжал получать эту ошибку, я попробовал большинство решений. но получается, что мой Мэйвен был по-прежнему указывая на Java 9 даже, хотя я поставил глобальную версию Java до 8, как только я установил, что все разрешилось.
Для тех, кто может иметь такого рода проблемы, проверьте как исправить Maven для использования Java по умолчанию