使用Java EE API替换已弃用的JPMS模块

问题描述 投票:120回答:7

Java 9 deprecated six modules that contain Java EE APIs和他们很快就是going to be removed

  • 使用javax.activation包的java.activation
  • java.corba与javax.activityjavax.rmijavax.rmi.CORBAorg.omg.*
  • 使用javax.transaction包的java.transaction
  • 包含所有javax.xml.bind.*包的java.xml.bind
  • 带有javax.jwsjavax.jws.soapjavax.xml.soap和所有javax.xml.ws.*包的java.xml.ws
  • 带有javax.annotation包的java.xml.ws.annotation

哪些维护的第三方工件提供了这些API?它们提供这些API或它们必须提供的其他功能并不重要 - 重要的是,它们是这些模块/包的直接替代品吗?

为了更容易收集知识,我回答了迄今为止我所知道的并将答案作为社区维基。我希望人们能够扩展它,而不是写出自己的答案。


在您投票结束之前:

  • 是的,已经有一些关于单个模块的问题,这个问题的答案当然会复制这些信息。但AFAIK没有任何一点可以了解所有这些,我认为这些有很大的价值。
  • 提出图书馆建议的问题通常被认为是偏离主题的,因为“他们倾向于吸引自以为是的答案和垃圾邮件”,但我不认为这适用于此。明确描述了一组有效的库:它们必须实现特定的标准。除此之外别无其他,所以我没有看到很多意见和垃圾邮件的风险。
java java-ee java-9 java-module
7个回答
150
投票

不使用已弃用的Java EE模块,而是使用以下工件。

JAF (java.activation)

JavaBeans Activation Framework是一种独立的技术(可在Maven Central上获得):

<dependency>
    <groupId>com.sun.activation</groupId>
    <artifactId>javax.activation</artifactId>
    <version>1.2.0</version>
</dependency>

(Qazxswpoi)

CORBA (java.corba)

来自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的实现)。

JTA (java.transaction)

独立版:

GlassFish

<dependency> <groupId>javax.transaction</groupId> <artifactId>javax.transaction-api</artifactId> <version>1.2</version> </dependency> ;在类和模块路径上查看如何使用Source和即将推出的1.2。)

JAXB (java.xml.bind)

参考实施:

1.3

(qazxsw poi; qazxsw poi解释了从哪里获得qazxsw poi和qazxsw poi。)

JAX-WS (java.xml.ws)

参考实施:

<!-- 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 320schemagen。)

Common Annotations (java.xml.ws.annotation)

xjc(Maven Central提供):

<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-ri</artifactId>
    <version>2.3.0</version>
    <type>pom</type>
</dependency>

(Qazxswpoi)


22
投票

JDK9的JAXB(java.xml.bind)

在jdk9 / 10 EA上的桌面应用程序中完美运行

Source

8
投票

似乎jaxws-ri传统上依赖于commonj.sdo:commonj.sdo:jar:2.1.1.v201112051852这显然可以从存储库wsgen找到


8
投票

我需要为基于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' 的东西。

现在它的情况非常糟糕,它有效,但是如何确定它是最好的替代品呢?


1
投票

只是对上述答案的一个小变化(改进)---仅适用于JAXB。可以使用compile范围添加依赖关系,并且仅在有效需要时才这样做(例如,当构建为在版本> = 9的JRE中运行时---此处以v11为例):

runtimeOnly

0
投票

我发现解决这些问题的JAXB部分的最简单方法是在我的根pom或我的bom中使用依赖管理:

https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core

在jdk11上编译失败的模块中:

this answer

此外,将org.glassfish的版本更新为0.14.0解决了我的所有jaxb生成问题。


0
投票

我已经使用JDK 11.0.3对上述大多数建议进行了实验,并且没有成功。我最终找到工作的唯一解决方案如下。也许还有其他选项也可以,但看起来选择版本是至关重要的。例如,将com.sun.xml.ws:rt更改为2.3.2会导致模块javax.jws不再可用。

org.eclipse.yasson
© www.soinside.com 2019 - 2024. All rights reserved.