Я использую JAXB 2.3 в настольном приложении для генерации кода Java из файла .xsd
.
Мое приложение в настоящее время скомпилировано в Java 8, но мне нужно запустить его на OpenJDK 11.
Насколько я понимаю, для компиляции его в Java 11 потребуется использовать Jakarta EE вместо Java EE.
Чтобы не обновлять все подряд, я пытаюсь просто запустить приложение, все еще скомпилированное для Java 8, и полагаться на обратную совместимость JDK, но получаю NoSuchMethodError
в результате плохого анализа XML.
Можно ли здесь использовать обратную совместимость JDK или мне придется перейти на Java 11?
Это веб-приложение или консольное/настольное приложение?
@BasilBourque это настольное приложение (я просто беру JAXB)
(Или во время выполнения доступны интерфейсы и реализация в пути к классам.)
JAXB входит в число функций Java EE, устаревших в Java SE 9 и удаленных в Java 11. JAXB теперь известен как Jakarta XML Binding.
Как поясняется в связанном JEP 320, вам просто нужно добавить реализацию JAXB в свой проект в качестве библиотеки.
Если вы хотите писать код для интерфейсов JAXB, а не для конкретного продукта реализации, вам также необходимо включить интерфейсы JAXB в качестве библиотеки в ваш проект.
Я предполагаю, что вы создаете консольное приложение или настольное приложение с графическим интерфейсом, а не веб-приложение.
Вы сказали:
Насколько я понимаю, для компиляции его в Java 11 потребуется использовать Jakarta EE вместо Java EE.
Нет, не совсем точно. Вам просто нужно добавить в проект две библиотеки:
Вы можете использовать последнюю версию 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 постепенно прекращается.
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>
Одной из реализаций этого 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>
@BalusC Спасибо за ответ. Итак, если это не часть Java SE, могу ли я запустить Java 8 + JAXB на JDK11 без перекомпиляции?