java.activation with
javax.activation
package java带有
javax.activity
,javax.rmi
,javax.rmi.CORBA
和org.omg.*
软件包的.corba 带有
javax.transaction
软件包的java.transaction java.xml.bind与所有
javax.xml.bind.*
软件包带有
javax.jws
,javax.jws.soap
,javax.xml.soap
和所有javax.xml.ws.*
软件包的java.xml.ws 带有
javax.annotation
软件包的java.xml.ws.annotation 所维护的第三方工件提供这些API?它们提供这些API的性能如何或它们必须提供哪些其他功能都无关紧要-重要的是,它们是否是这些模块/软件包的直接替代品?
以使其变得更容易为了收集知识,我用到目前为止的知识回答了这个问题,并将答案做成了社区Wiki。我希望人们能扩展它,而不是写自己的答案。
在投票结束之前:
是的,已经有一些问题了在各个模块上,对此问题的答案当然会重复该信息。但是AFAIK并没有一个要学习所有这些知识的要点,我认为这很有价值。
要求图书馆推荐的问题通常被认为是题外话,因为“它们倾向于吸引有思想的答案和垃圾邮件” ,但我认为这并不适用。有效库的集合已明确标出:它们必须实现特定的标准。除此之外,别无其他,因此我认为意见和垃圾邮件风险不大。
#1 楼
代替使用不推荐使用的Java EE模块,请使用以下工件。JAF(java.activation)
JavaBeans Activation Framework(现为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 API,ORB实现,CosNaming提供程序等的维护,否则不会有CORBA的独立版本。由于Java SE平台认可CORBA的独立实现,因此可以进行第三方维护。相反,RMI-IIOP的API仅在Java SE中定义和实现。除非启动专用的JSR来维护RMI-IIOP,否则它将没有独立版本的RMI-IIOP,或者Eclipse Foundation接管了API的管理(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)
由于Java EE被重命名为Jakarta EE,JAXB现在由新的工件提供:
<
<!-- 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>
JAXB参考实现页面。
schemagen
和xjc
也可以从那里下载,作为独立JAXB发行版的一部分。 >另请参见链接的答案。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>
(源)
评论
如果模块同时从jdk和com.sun.xml.ws依赖项读取jax-ws怎么办?
–nllsdfx
18年5月16日在14:14
我不确定你到底在问什么。哪个模块读取jax-ws?如果模块图中有java.xml.ws,而类路径上有com.sun.xml.ws:jaxws-ri,则后者将被忽略(由于拆分包)。
– Nicolai Parlog
18年5月16日在14:17
好吧,我想在模块中使用com.sun.xml.ws:jaxws-ri而不是java.xml.ws,因为后者已被弃用并将被删除。然后我将依赖项添加到我的pom文件中,并出现错误“模块xyz从'java.xml.ws'和'java.xml.ws'读取包'javax.xml.ws'”。
–nllsdfx
18年5月16日在14:27
看起来模块java.xml.ws毕竟已经解析了,可能是由于--add-modules或其他一些模块需要它。您能提出一个新问题,以便我们看看吗?
– Nicolai Parlog
18年5月16日在14:44
确实如此。有两个细节:(1)如果没有显式模块(即带有模块声明的显式模块)不依赖JAXB,您仍然可以将它们放在类路径中,而拆分包并不重要。 (2)命令行选项--patch-module可以修补拆分。
– Nicolai Parlog
18-10-2在21:23
#2 楼
适用于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>
评论
谢谢,这对我在Java 10上有效。但是,对于jaxb-api和jaxb-runtime都使用单个属性作为版本号2.3.0并不是一个好主意。 Glassfish运行时当前为2.3.0.1,而API仍为2.3.0。我建议将属性元素完全放在“答案”中,然后分别对每个依赖项中的每个版本号进行硬编码。
–罗勒·布尔克
18年7月17日在22:40
我的建议:在
–AndrewF
18年11月8日在3:26
JAXB 2.3。[0 | 1]将不再适用于Java 11!见github.com/eclipse-ee4j/jaxb-api/issues/78
–col.panic
18/12/12在9:46
#3 楼
我需要为基于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'
(您可能需要
compile
或其他示波器,runtimeOnly
对我们来说足够。)我注意到https://mvnrepository.com/artifact/com.sun.xml .bind / jaxb-core被描述为“旧”,并且使用此答案也可以用于基于
org.glassfish
的东西,它也带来了org.eclipse.yasson
。现在情况确实很混乱,它可以工作,但是任何人都应该怎么做确定是最好的替代品,对吧?
评论
我们也在使用gradle,但是我什么也没得到。试图将Maven解决方案转换为gradle,但没有成功。您的示例对我有用(尽管未提供编译,但提供了使用,我尝试迁移的项目正在使用vertx)。感谢您的分享,确实,我也希望很快能对gradle进行一些说明:)
– Lars
18-09-20在11:14
请注意,情况发展很快-就在不久前,我将另一个项目移至Spring Boot 2.2,其中Jakarta API更为突出,但我们仍然需要实现。为此,我仍然使用org.glassfish。*东西。每当我使用Spring Boot项目时,我都倾向于检查它们的依赖版本附录并尽可能地遵守(将当前版本更改为所需的版本):docs.spring.io/spring-boot/docs/current/reference/html/ …
–virgo47
6月15日17:56
#4 楼
看来jaxws-ri是可传递地依赖于commonj.sdo:commonj.sdo:jar:2.1.1.v201112051852,这显然可以从存储库http://download.eclipse.org/rt/eclipselink/maven.repo评论
可能是因为它更适合评论而不是答案。无论如何,您是否能够解决问题?我似乎无法检索依赖关系。 mvn -U全新安装总是说找不到工件commonj.sdo:commonj.sdo:jar:2.1.1.v201112051852。
– Zyl
18年7月2日在15:42
我不是Maven专家,但是似乎在pom.xml中未声明任何存储库的情况下正在找到commonj.sdo:commonj.sdo:jar:2.1.1.v201112051852。如果pom.xml中有存储库(例如spring-snapshot),则还必须添加download.eclipse.org/rt/eclipselink/maven.repository,例如
–theNikki1
18年7月3日在8:11
我可以使其正常工作,但还必须从settings.xml中删除一个镜像。但是,在进一步检查之后,我无法复制这是如何代替已淘汰的包装的。相反,我发现此依赖项效果很好:
– Zyl
18年7月4日在15:31
我能够排除软件包sdo-eclipselink-plugin
–约瑟夫·欲望
18/12/11在22:41
#5 楼
对上述答案的改动很小(改进)---仅在JAXB上举例说明。可以在有效的情况下(例如,当构建为在版本> = 9的JRE中运行时构建-在这里以v11为例)添加带有runtime
范围的依赖项:<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>
#6 楼
我已经使用JDK 11.0.3对上述建议中的大多数进行了试验,但并未成功。我最终发现可行的唯一解决方案如下。也许还有其他选择也可以使用,但是选择版本似乎很关键。例如,将com.sun.xml.ws:rt更改为2.3.2将导致模块javax.jws不再可用。 <dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.4.0-b180830.0438</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>rt</artifactId>
<version>2.3.1</version>
</dependency>
#7 楼
我在我的春季mvc项目中使用jdk 11 + ant +常春藤。我收到错误消息“包javax.jws不存在”,所以我向类路径中添加了javax.jws-api-1.1.jar并成功了! br />只需从https://repo1.maven.org/maven2/javax/jws/javax.jws-api/1.1/javax.jws-api-1.1.jar下载jar并将其添加到您的您的build.xml中的类路径
评论
您可以通过Maven的依赖关系解析系统正确地包含它:
– msteiger
8月7日6:59
#8 楼
我发现解决这些问题的JAXB部分最简单的方法是在根pom或bom中使用依赖管理: <project ...>
<dependencyManagement>
<dependencies>
<!-- ... -->
<!-- Gone from jvm in java11 -->
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-ri</artifactId>
<version>2.4.0-b180830.0438</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<!-- ... -->
</dependencies>
</dependencyManagement>
</project>
以及在模块中无法在jdk11上编译:
<!-- ... -->
<dependencies>
<!-- Gone from jvm in java11 -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<scope>runtime</scope>
</dependency>
<!-- ... -->
</dependencies>
<!-- ... -->
此外,将
org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
的版本更新为0.14.0可以解决我所有的jaxb生成问题。#9 楼
如果您在Talend(例如7.x)中遇到此问题,则可以添加项目的默认POM.xml:<dependencies>
<dependency>
<groupId>javax.xml.soap</groupId>
<artifactId>javax.xml.soap-api</artifactId>
<version>1.4.0</version>
</dependency>
</dependencies>
经过测试:
AdoptJDK 8.0 .275.1-hotspot:OK
AdoptJDK 11.0.9.101-hotspot:OK
AdoptJDK 15.0.1.9-hotspot:KO(但这是另一个问题:条件操作数类型Exception和TDieException不兼容)
Zulu -8.50.0.1017:OK
Zulu-11.43.1015:OK
评论
您几乎可以在github.com/javaee下找到所有这些动静的对象,并在JEP 320上找到一些细节的链接:删除Java EE和CORBA模块另请参阅InfoWorld Java路线图上的这篇2018-05-14文章:Paul Krill塑造了Eclipse的Jakarta EE企业Java。副标题:Eclipse Foundation概述了将构成新的云原生,微服务友好型企业Java工作的39个项目,以及GlassFish的发展方式
它已从JDK 11中删除。如果您使用的是jdk 9或更高版本,则最好直接添加依赖关系,而不要使用“ --add-modules java.xml.bind”之类的东西