我必须在我的项目中使用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;
}
但是有一个错误:
它是什么意思以及如何修复它以便我可以使用上面的依赖项而不是jdk中的java.xml.ws
?
答案 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来替换平台模块。