Nic*_*lai 150 java java-ee java-9 java-module
Java 9 弃用了六个包含Java EE API的模块,它们将很快被删除:
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.*包javax.annotation包的java.xml.ws.annotation哪些维护的第三方工件提供了这些API?它们提供这些API或它们必须提供的其他功能并不重要 - 重要的是,它们是这些模块/包的直接替代品吗?
为了更容易收集知识,我回答了迄今为止我所知道的并将答案作为社区维基.我希望人们能够扩展它,而不是写出自己的答案.
在您投票结束之前:
Nic*_*lai 165
不使用已弃用的Java EE模块,而是使用以下工件.
JavaBeans Activiation Framework是一种独立的技术(可在Maven Central上获得):
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>1.2.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
(来源)
来自JEP 320:
除非第三方接管CORBA API,ORB实现,CosNaming提供商等的维护,否则将不会有独立版本的CORBA.第三方维护是可能的,因为Java SE平台支持CORBA的独立实现.相比之下,RMI-IIOP的API仅在Java SE中定义和实现.除非专门的JSR开始维护它,否则不会有RMI-IIOP的独立版本,或者Eclipse的管理工作由Eclipse Foundation接管(Java EE从JCP到Eclipse Foundation的管理过渡包括GlassFish及其CORBA和RMI-IIOP的实现).
独立版:
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>javax.transaction-api</artifactId>
<version>1.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
(来源 ;看看如何使用1.2和即将到来1.3的课程和模块路径.)
参考实施:
<!-- API -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.2</version>
</dependency>
<!-- Runtime -->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
(来源 ; JEP 320解释了获取jaxb-core和jaxb-impl从).
参考实施:
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-ri</artifactId>
<version>2.3.0</version>
<type>pom</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)
(来源 ;也解释了获取schemagen和xjc从).
Java Commons Annotations(可在Maven Central上获得):
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
(来源)
小智 23
JDK9的JAXB(java.xml.bind)
在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>
Run Code Online (Sandbox Code Playgroud)
小智 8
似乎jaxws-ri依赖于commonj.sdo:commonj.sdo:jar:2.1.1.v201112051852,它显然可以从存储库http://download.eclipse.org/rt/eclipselink/maven.repo找到
我需要为基于Spring Boot 2的应用程序替换JAX-WS(java.xml.ws)和JAXB(java.xml.bind),最后使用这些JAR(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'
Run Code Online (Sandbox Code Playgroud)
(你可能需要compile或其他范围,runtimeOnly对我们来说足够了.)
我注意到https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core被描述为"旧",并且使用此答案也用于org.glassfish引入的基础内容org.eclipse.yasson.
现在它的情况非常糟糕,它有效,但是如何确定它是最好的替代品呢?
小智 5
上述答案只是一个微小的变化(改进)——此处仅针对 JAXB 进行了示例。仅当确实需要时,才可以添加具有范围的依赖项runtime(即,当构建在版本 >= 9 的 JRE 中运行时 --- 这里以 v11 为例):
<profile>
<id>when-on-jdk-11</id>
<activation>
<jdk>11</jdk>
</activation>
<properties>
<!-- missing artefacts version properties -->
<jaxb-api.version>2.3.1</jaxb-api.version>
<jaxb-impl.version>2.3.2</jaxb-impl.version> <!-- one might let it the same with the jaxb-api.version -->
</properties>
<dependencies>
<!-- runtime dependencies to avoid JAXB related CNF exceptions when running on Java 11 (e.g.: ClassNotFoundException: javax.xml.bind.annotation.XmlType) -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jaxb-api.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>${jaxb-impl.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</profile>
Run Code Online (Sandbox Code Playgroud)
小智 5
我在我的 spring mvc 项目中使用 jdk 11 + ant + ivy 。我收到错误“包 javax.jws 不存在”,所以我将javax.jws-api-1.1.jar添加到类路径中,它起作用了!只需从https://repo1.maven.org/maven2/javax/jws/javax.jws-api/1.1/javax.jws-api-1.1.jar下载 jar
并将其添加到您的类路径中build.xml
或者将其添加到您的pom.xml:
<dependency>
<groupId>javax.jws</groupId>
<artifactId>javax.jws-api</artifactId>
<version>1.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48778 次 |
| 最近记录: |