Java 9 устарела из шести модулей, которые содержат API Java EE, и они скоро будут удалены :
- java.активация с
javax.activation
пакетом - java.corba с
javax.activity
,javax.rmi
,javax.rmi.CORBA
иorg.omg.*
пакеты - сделка с
javax.transaction
пакетом - java.xml.bind со всеми
javax.xml.bind.*
пакетами - java.xml.ws с
javax.jws
,javax.jws.soap
,javax.xml.soap
и всеjavax.xml.ws.*
пакеты - java.xml.ws.annotation с
javax.annotation
пакетом
Какие поддерживаемые сторонние артефакты предоставляют эти API? Неважно, насколько хорошо они предоставляют эти API или какие другие функции они могут предложить - все, что имеет значение, являются ли они заменой этих модулей / пакетов?
Чтобы было проще собирать знания, я ответил тем, что знаю до сих пор, и сделал ответ вики-сообществом. Я надеюсь, что люди расширят его вместо того, чтобы писать свои собственные ответы.
Прежде чем голосовать, чтобы закрыть:
- Да, уже есть несколько вопросов по отдельным модулям, и ответ на этот вопрос, конечно, дублирует эту информацию. Но AFAIK нет единого смысла, чтобы узнать обо всем этом, что я думаю, имеет большую ценность.
- Вопросы с просьбой дать рекомендации по библиотекам обычно считаются не по теме, потому что «они, как правило, привлекают взвешенные ответы и спам», но я не думаю, что это применимо здесь. Набор допустимых библиотек четко разграничен: они должны реализовывать определенный стандарт. Кроме этого, ничего больше не имеет значения, поэтому я не вижу большого риска для мнения и спама.
java
jakarta-ee
java-9
java-module
Nicolai
источник
источник
Ответы:
Вместо использования устаревших модулей Java EE используйте следующие артефакты.
JAF ( java.activation )
JavaBeans Activation Framework (в настоящее время Jakarta Activation ) - это отдельная технология (доступная в Maven Central):
( Источник )
CORBA ( java.corba )
От JEP 320 :
JTA ( java.transaction )
Автономная версия:
( Источник )
JAXB ( java.xml.bind )
Поскольку Java EE был переименован в Jakarta EE , JAXB теперь представлен новыми артефактами:
Справочная страница JAXB .
schemagen
иxjc
может быть загружен там также как часть автономного дистрибутива JAXB.Смотрите также связанный ответ .
JAX-WS ( java.xml.ws )
Эталонная реализация:
Загрузка отдельного дистрибутива (содержит
wsgen
иwsimport
).Общие аннотации ( java.xml.ws.annotation )
Аннотации Java Commons (доступны на Maven Central):
( Источник )
источник
jax-ws
из jdk иcom.sun.xml.ws
зависимости?com.sun.xml.ws:jaxws-ri
вместоjava.xml.ws
моего модуля, потому что последний устарел и будет удален. И я добавил зависимость в мой pom-файл, и появилась ошибка «модуль xyz читает пакет« javax.xml.ws »как из java.xml.ws, так и из java.xml.ws».--add-modules
или потому, что это требуется некоторым другим модулям. Можете ли вы открыть новый вопрос, чтобы мы могли посмотреть на него?--patch-module
может исправить разделение.JAXB (java.xml.bind) для JDK9
Отлично работает в моих настольных приложениях на jdk9 / 10 EA
источник
2.3.0
для обоихjaxb-api
иjaxb-runtime
не является хорошей идеей. Время выполнения Glassfish в настоящее время равно2.3.0.1
API2.3.0
. Я предлагаюproperties
полностью исключить элемент из ответа и просто жестко закодировать каждый номер версии в каждомdependency
отдельно.<dependencyManagement>
импортироватьorg.glassfish.jaxb:jaxb-bom
спецификацию в какой-либо версии (последняя версия 2.3.0.1), а затем в фактическом<dependencies>
разделе не указывать версию дляjaxb-api
илиjaxb-runtime
. Номер версии будет взят из спецификации, что обеспечит их постоянную синхронизацию и совместное обновление.Мне нужно было заменить JAX-WS (java.xml.ws) и JAXB (java.xml.bind) для моего приложения на основе Spring Boot 2, и в итоге я получил следующие JAR (сборка Gradle):
(Вам может понадобиться
compile
или другой объем, намruntimeOnly
было достаточно.)Я заметил, что https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core описывается как «Старый», и использование этого ответа пошло и для
org.glassfish
основанных материалов, которые также были введеныorg.eclipse.yasson
.Теперь это действительно грязная ситуация, она работает, но как можно быть уверенным, что это лучшая замена, верно?
источник
Похоже, что jaxws-ri транзитивно зависит от commonj.sdo: commonj.sdo: jar: 2.1.1.v201112051852, который, очевидно, можно найти в репозитории http://download.eclipse.org/rt/eclipselink/maven.repo.
источник
mvn -U clean install
продолжает говоритьCould not find artifact commonj.sdo:commonj.sdo:jar:2.1.1.v201112051852
.<dependency> <groupId>javax.jws</groupId> <artifactId>jsr181-api</artifactId> <version>1.0-MR1</version> </dependency>
sdo-eclipselink-plugin
Просто незначительное изменение (улучшение) вышеупомянутых ответов - приведено здесь только для JAXB. Можно добавить зависимости с
runtime
областью действия и только в том случае, если это эффективно необходимо (т. Е. При сборке для запуска в JRE с версией> = 9 - здесь показан пример v11):источник
Я экспериментировал с большинством предложений, описанных выше, используя JDK 11.0.3, и не был успешным. Единственное решение, которое я в итоге нашел для работы, заключается в следующем. Возможно, есть и другие варианты, которые также работают, но кажется, что выбор версии имеет решающее значение. Например, изменение com.sun.xml.ws:rt на 2.3.2 приводит к тому, что модуль javax.jws больше не будет доступен.
источник
Я нашел самый простой способ обойти JAXB-части этих проблем - использовать управление зависимостями в моей корневой помпе или в моей:
И в модулях, которые терпят неудачу при компиляции на jdk11:
Кроме того, обновление версии
org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
до 0.14.0 решило все проблемы генерации jaxb для меня.источник
Я использую JDK 11 + муравей + плющ в моем весеннем проекте MVC. Я получаю ошибку пакет javax.jws не существует », поэтому я добавил javax.jws-api-1.1.jar в classpath, и это сработало! Просто скачайте jar с https://repo1.maven.org/maven2/javax/jws/javax.jws-api/1.1/javax.jws-api-1.1.jar и добавьте его в путь к классам в вашем build.xml
источник