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.


当前回答

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

其他回答

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

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

如果遇到同样的问题,请将下面的依赖项添加到pom.xml中

<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>2.3.3</version>
</dependency>

然后使用JAVA 8作为替代JRE。要了解更多细节,请参考这个视频,它对我很有用。

如果你有这个问题在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:好的

我发现绕过这些问题的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生成的所有问题。