JAXB-зависимое приложение, скомпилированное для Java 8 – можно ли запускать как есть на JDK 11?

Я использую JAXB 2.3 в настольном приложении для генерации кода Java из файла .xsd.

Мое приложение в настоящее время скомпилировано в Java 8, но мне нужно запустить его на OpenJDK 11.

Насколько я понимаю, для компиляции его в Java 11 потребуется использовать Jakarta EE вместо Java EE.

Чтобы не обновлять все подряд, я пытаюсь просто запустить приложение, все еще скомпилированное для Java 8, и полагаться на обратную совместимость JDK, но получаю NoSuchMethodError в результате плохого анализа XML.

Можно ли здесь использовать обратную совместимость JDK или мне придется перейти на Java 11?

@BalusC Спасибо за ответ. Итак, если это не часть Java SE, могу ли я запустить Java 8 + JAXB на JDK11 без перекомпиляции?

Bob 30.07.2024 13:56

Это веб-приложение или консольное/настольное приложение?

Basil Bourque 30.07.2024 16:29

@BasilBourque это настольное приложение (я просто беру JAXB)

Bob 30.07.2024 17:25
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вр; доктор

  1. Добавьте интерфейсы JAXB (API) в свой проект.
  2. Добавьте реализацию JAXB в свой проект.

(Или во время выполнения доступны интерфейсы и реализация в пути к классам.)

JAXB удален из Java SE

JAXB входит в число функций Java EE, устаревших в Java SE 9 и удаленных в Java 11. JAXB теперь известен как Jakarta XML Binding.

Как поясняется в связанном JEP 320, вам просто нужно добавить реализацию JAXB в свой проект в качестве библиотеки.

Если вы хотите писать код для интерфейсов JAXB, а не для конкретного продукта реализации, вам также необходимо включить интерфейсы JAXB в качестве библиотеки в ваш проект.

Я предполагаю, что вы создаете консольное приложение или настольное приложение с графическим интерфейсом, а не веб-приложение.

Вы сказали:

Насколько я понимаю, для компиляции его в Java 11 потребуется использовать Jakarta EE вместо Java EE.

Нет, не совсем точно. Вам просто нужно добавить в проект две библиотеки:

  • Копия интерфейсов JAXB (API).
  • Реализация этих API.

Вы можете использовать последнюю версию API Java EE. Они должны работать под Java 11, хотя сначала вам следует протестировать.

Но имейте в виду: последняя версия Java EE была переиздана как первая версия Jakarta EE. Первоначальная версия Jakarta EE практически идентична последней версии Java EE.

В этом первоначальном выпуске Jakarta EE по-прежнему использовалось наименование пакетов javax.*, используемое в Java EE. Последующие версии Jakarta EE перешли на использование упаковки jakarta.*, но не в первоначальной версии.

Поэтому я рекомендую первоначальную версию Jakarta EE (как показано ниже). Я предполагаю, что вы можете увидеть незначительные обновления на стороне Jakarta EE, но не на стороне Java EE, поскольку проект Jakarta активно развивается и поддерживается, в то время как проект Java EE постепенно прекращается.

Джакарта XML-привязка

JAXB был более четко переименован в Jakarta XML Binding . В версии версии 2.3 по-прежнему использовалось имя пакета javax.*.

Последним обновлением этого выпуска была версия 2.3.3, доступная в репозитории Maven, например вот этот.

<!-- https://mvnrepository.com/artifact/jakarta.xml.bind/jakarta.xml.bind-api -->
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>2.3.3</version>
</dependency>

Реализация JAXB в Eclipse

Одной из реализаций этого API является Eclipse Implementation of JAXB , первоначально созданная Sun Microsystems , проданная Oracle , а затем переданная в дар Eclipse Foundation.

Я предполагаю, что вам нужна версия 2.3.9 для использования с Jakarta XML Binding 2.3.x. Но это основано на взгляде на документы; Я не пробовал.

Я ожидаю, что вы сможете найти и другие реализации.

<!-- https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-impl -->
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.9</version>
</dependency>

Другие вопросы по теме