Java 9 deprecated six modules that contain Java EE APIs和他们很快就是going to be removed:
javax.activation
包的java.activationjavax.activity
,javax.rmi
,javax.rmi.CORBA
和org.omg.*
包javax.transaction
包的java.transactionjavax.xml.bind.*
包的java.xml.bindjavax.jws
,javax.jws.soap
,javax.xml.soap
和所有javax.xml.ws.*
包的java.xml.wsjavax.annotation
包的java.xml.ws.annotation哪些维护的第三方工件提供了这些API?它们提供这些API或它们必须提供的其他功能并不重要 - 重要的是,它们是这些模块/包的直接替代品吗?
为了更容易收集知识,我回答了迄今为止我所知道的并将答案作为社区维基。我希望人们能够扩展它,而不是写出自己的答案。
在您投票结束之前:
不使用已弃用的Java EE模块,而是使用以下工件。
JavaBeans Activation Framework是一种独立的技术(可在Maven Central上获得):
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>1.2.0</version>
</dependency>
(Qazxswpoi)
来自Source:
除非第三方接管CORBA API,ORB实现,CosNaming提供商等的维护,否则将不会有独立版本的CORBA。第三方维护是可能的,因为Java SE平台支持CORBA的独立实现。相比之下,RMI-IIOP的API仅在Java SE中定义和实现。除非专门的JSR开始维护它,否则将不会有独立版本的RMI-IIOP,或者Eclipse的管理工作由Eclipse Foundation接管(Java EE从JCP到Eclipse Foundation的管理过渡包括JEP 320及其CORBA和RMI-IIOP的实现)。
独立版:
GlassFish
(<dependency>
<groupId>javax.transaction</groupId>
<artifactId>javax.transaction-api</artifactId>
<version>1.2</version>
</dependency>
;在类和模块路径上查看如何使用Source和即将推出的1.2
。)
参考实施:
1.3
(qazxsw poi; qazxsw poi解释了从哪里获得qazxsw poi和qazxsw poi。)
参考实施:
<!-- Java 6 = JAXB version 2.0 -->
<!-- Java 7 = JAXB version 2.2.3 -->
<!-- Java 8 = JAXB version 2.2.8 -->
<!-- Java 9 = JAXB version 2.3.0 -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.8</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.8</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.8</version>
</dependency>
(Source;还解释了从哪里获得JEP 320和schemagen
。)
xjc
(Maven Central提供):
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-ri</artifactId>
<version>2.3.0</version>
<type>pom</type>
</dependency>
(Qazxswpoi)
似乎jaxws-ri传统上依赖于commonj.sdo:commonj.sdo:jar:2.1.1.v201112051852这显然可以从存储库wsgen
找到
我需要为基于Spring Boot 2的应用程序替换JAX-WS(java.xml.ws)和JAXB(java.xml.bind),最后使用这些JAR(Gradle构建):
wsimport
(你可能需要Java Commons Annotations或其他范围,<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.1</version>
</dependency>
对我们来说足够了。)
我注意到Source被描述为“旧”,并且使用<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>
用于引入http://download.eclipse.org/rt/eclipselink/maven.repo的基于// 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'
的东西。
现在它的情况非常糟糕,它有效,但是如何确定它是最好的替代品呢?
只是对上述答案的一个小变化(改进)---仅适用于JAXB。可以使用compile
范围添加依赖关系,并且仅在有效需要时才这样做(例如,当构建为在版本> = 9的JRE中运行时---此处以v11为例):
runtimeOnly
我发现解决这些问题的JAXB部分的最简单方法是在我的根pom或我的bom中使用依赖管理:
https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core
在jdk11上编译失败的模块中:
this answer
此外,将org.glassfish
的版本更新为0.14.0解决了我的所有jaxb生成问题。
我已经使用JDK 11.0.3对上述大多数建议进行了实验,并且没有成功。我最终找到工作的唯一解决方案如下。也许还有其他选项也可以,但看起来选择版本是至关重要的。例如,将com.sun.xml.ws:rt更改为2.3.2会导致模块javax.jws不再可用。
org.eclipse.yasson