Замена устаревших модулей JPMS на Java EE API
В Java 9 признаны устаревшими шесть модулей, содержащих Java EE API, и они скоро будут удалены:
- java.активация с
javax.activation
пакетом - java.corba с
javax.activity
,javax.rmi
,javax.rmi.CORBA
иorg.omg.*
пакетами - java.транзакция с
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, нет единого пункта, чтобы узнать обо всех них, что, я думаю, имеет большую ценность.
- Вопросы, требующие рекомендаций по библиотеке, обычно считаются не по теме, потому что "они, как правило, привлекают самоуверенные ответы и спам", но я не думаю, что это применимо здесь. Набор допустимых библиотек четко определен: они должны реализовывать определенный стандарт. Помимо этого, ничто другое не имеет значения, поэтому я не вижу большого риска для мнений и спама.
Переведено автоматически
Ответ 1
Вместо устаревших модулей Java EE используйте следующие артефакты.
JAF (java.активация)
Платформа активации JavaBeans (теперь Jakarta Activation) - это автономная технология (доступна в Maven Central):
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>jakarta.activation</artifactId>
<version>1.2.2</version>
</dependency>
CORBA (java.corba)
От JEP 320:
Автономной версии CORBA не будет, если третьи стороны не возьмут на себя обслуживание CORBA API, реализацию ORB, поставщика CosNaming и т.д. Поддержка сторонних производителей возможна, поскольку платформа Java SE поддерживает независимые реализации CORBA. Напротив, API для RMI-IIOP определен и реализован исключительно в Java SE. Автономной версии RMI-IIOP не будет, если для ее обслуживания не будет запущен специальный JSR или управление API не перейдет к Eclipse Foundation (передача управления Java EE от JCP к Eclipse Foundation включает в себя GlassFish и его реализацию CORBA и RMI-IIOP).
JTA (java.transaction)
Автономная версия:
<dependency>
<groupId>jakarta.transaction</groupId>
<artifactId>jakarta.transaction-api</artifactId>
<version>1.3.3</version>
</dependency>
JAXB (java.xml.bind)
Since Java EE was rebranded to Jakarta EE, JAXB is now provided by new artifacts:
<!-- API -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.3</version>
</dependency>
<!-- Runtime -->
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.3</version>
<scope>runtime</scope>
</dependency>
<!-- Alternative runtime -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.3</version>
<scope>runtime</scope>
</dependency>
JAXB Reference Implementation page.
The alternative runtime was brought up by @Abhijit Sarkar since com.sun.xml.bind:jaxb-impl
has been deprecated.
schemagen
and xjc
can be downloaded from there too as part of a standalone JAXB distribution.
See also linked answer.
JAX-WS (java.xml.ws)
Эталонная реализация:
<!-- API -->
<dependency>
<groupId>jakarta.xml.ws</groupId>
<artifactId>jakarta.xml.ws-api</artifactId>
<version>2.3.3</version>
</dependency>
<!-- Runtime -->
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.3.3</version>
</dependency>
Загрузка автономного дистрибутива (содержит wsgen
и wsimport
).
Общие аннотации (java.xml.ws.annotation)
Аннотации Java Commons (доступны в Maven Central):
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>1.3.5</version>
</dependency>
Ответ 2
JAXB (java.xml.bind) для JDK9
Отлично работает в моих настольных приложениях на jdk9 / 10 EA
<properties>
<jaxb-api.version>2.3.0</jaxb-api.version>
</properties>
<!-- JAXB 2.3.0 for jdk9+ -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jaxb-api.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>${jaxb-api.version}</version>
</dependency>
<!-- JAXB needs javax.activation module (jdk9) -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
<version>1.2.0</version>
</dependency>
Ответ 3
Мне необходимо заменить в JAX-WS в (Ява.XML-файле.РВ) и JAXB (Java-приложений.XML-файле.привязка) для моей Весна загрузки 2 приложения а в итоге эти банки (Gradle в построить):
// replacements for deprecated JDK module java.xml.ws
runtimeOnly 'javax.xml.ws:jaxws-api:2.3.0' // javax.xml.ws.* classes
runtimeOnly 'javax.jws:jsr181-api:1.0-MR1' // for javax.jws.* classes
// replacement for deprecated JDK module java.xml.bind
runtimeOnly 'javax.xml.bind:jaxb-api'
runtimeOnly 'org.glassfish.jaxb:jaxb-runtime:2.3.0.1'
runtimeOnly 'org.glassfish:javax.json:1.1.2'
runtimeOnly 'org.eclipse:yasson:1.0.1'
(Вам может понадобиться compile
или другая область применения, runtimeOnly
нам было достаточно.)
Я заметил, что https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core описывается как "Старый", и использование этого ответа использовалось для org.glassfish
материалов, которые также использовалисьorg.eclipse.yasson
.
Теперь это действительно запутанная ситуация, это работает, но как кто-либо должен быть уверен, что это лучшая замена, верно?
Ответ 4
Похоже, что jaxws-ri транзитивно зависит от commonj.sdo:commonj.sdo:jar: 2.1.1.v201112051852, который, по-видимому, можно найти в репозитории http://download.eclipse.org/rt/eclipselink/maven.repo