Java 9弃用了六个包含Java EE api的模块,它们很快就会被移除:

java。使用javax激活。激活包 java。Corba和javax。活动,javax。rmi, javax.rmi。CORBA和org.omg。*包 java。使用javax的事务。交易方案 Java.xml.bind与所有javax.xml.bind。*包 Java.xml.ws和javax。jw, javax.jws。肥皂,javax.xml。Soap和所有javax.xml.ws。*包 Java.xml.ws.annotation。注释包

哪些维护的第三方构件提供了这些api ?它们提供的api有多好,或者它们必须提供哪些其他功能并不重要——重要的是,它们是这些模块/包的临时替代品吗?

为了更容易地收集知识,我回答了我目前所知道的,并将答案创建了一个社区wiki。我希望人们能扩展它,而不是自己写答案。


在投票结束前:

Yes, there are already some questions on individual modules and an answer to this question would of course duplicate that information. But AFAIK there is no single point to learn about all of these, which I think has a lot of value. Questions asking for library recommendations are usually considered off-topic, because "they tend to attract opinionated answers and spam", but I don't think that applies here. The set of valid libraries is clearly delineated: They have to implement a specific standard. Beyond that nothing else matters, so I don't see much risk for opinion and spam.


当前回答

到2022年还在经历这一切真的很痛苦! 我尝试了上面的许多建议,但只能让它与以下依赖项一起工作。

<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.3.0.1</version>
</dependency>
 
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
 
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.1</version>
</dependency>
  
<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.25.0-GA</version>
</dependency>

注意:不要试图更新依赖项,就这样吧,这对我来说很有效。

其他回答

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>

我使用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> 

只是对上面的答案进行了微小的修改(改进)——这里的示例仅针对JAXB。我们可以在运行时范围内添加依赖项,并且只有在有效需要时才可以这样做(例如,当构建运行在版本>= 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>

如果你有这个问题在Talend(7。),你可以在项目的默认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:好的 Zulu-11.43.1015:好的

jaxws-ri似乎传递依赖于commonj.sdo:commonj.sdo:jar:2.1.1。V201112051852,显然可以从存储库http://download.eclipse.org/rt/eclipselink/maven.repo中找到