Java 10:替换java.xml.ws冲突

时间:2018-05-17 13:17:23

标签: java java-10

我必须在我的项目中使用java.xml.ws*组件,但由于它已被弃用且很快就会被删除,我想使用替换这些组件。所以我将这个依赖项添加到我的项目的pom文件中:

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

这是我的模块配置:

module x.y.z {
    requires kotlin.stdlib;
    requires spring.boot;
    requires spring.boot.autoconfigure;
    requires spring.context;
    requires cxf.core;
    requires cxf.rt.frontend.jaxws;
    requires java.xml.ws;
}

但是有一个错误:

enter image description here

它是什么意思以及如何修复它以便我可以使用上面的依赖项而不是jdk中的java.xml.ws

2 个答案:

答案 0 :(得分:5)

只使用Java 11 :)那里没有javax.xml.ws模块,所以没有冲突。

对于Java 10,最简单的解决方法是将jaxws-ri的范围更改为runtime

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

答案 1 :(得分:2)

通过添加git checkout BRANCH_NAME,您可以告诉模块系统您依赖于已弃用的Java EE模块 java.xml.ws ,然后它将解析并使其可用。同时,模块路径上似乎有一个同名的模块。 (可能是由 jaxws-ri 引入的JAR?)

虽然,想到它,我本来期望编译器消息抱怨重复模块......看起来错误(是编译器还是运行时?)来自IDE。如果使用Maven运行构建会发生什么?

无论如何,如果你愿意从Java 11开始,你可以尝试一下。 Java EE模块已删除,因此平台模块不会发生干扰。我不确定是否可以在模块路径上添加 java。* 模块。

如果不是或者您更喜欢坚持使用Java 10,则应该查看upgreadable modules--upgrade-module-path option。这样,您就可以使用提供JAX WS API的JAR来替换平台模块。