Java 10:替换 java.xml.ws 冲突
Java 10: Replacement for java.xml.ws conflict
我必须在我的项目中使用 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
?
通过添加 requires java.xml.ws
,您告诉模块系统您依赖于已弃用的 Java EE 模块 java.xml.ws,然后它将解决并提供。同时模块路径上似乎有一个同名模块。 (也许是 jaxws-ri 引入的 JAR?)
虽然,仔细想想,我本以为会有编译器消息抱怨重复模块...看起来错误(是编译器还是 运行time?)来自 IDE。如果您 运行 使用 Maven 构建会怎样?
总之,如果你愿意从Java11开始,你可以试试看。 Java EE 模块已删除,因此平台模块不会受到干扰。不过,我不确定是否可以在模块路径上添加 java.* 模块。
如果不是或者你更喜欢坚持 Java 10,你应该看看 upgreadable modules and the --upgrade-module-path
option。这样您就可以使用提供 JAX WS API 的 JAR 来替换平台模块。
就用Java11 :) 那里没有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>
我必须在我的项目中使用 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
?
通过添加 requires java.xml.ws
,您告诉模块系统您依赖于已弃用的 Java EE 模块 java.xml.ws,然后它将解决并提供。同时模块路径上似乎有一个同名模块。 (也许是 jaxws-ri 引入的 JAR?)
虽然,仔细想想,我本以为会有编译器消息抱怨重复模块...看起来错误(是编译器还是 运行time?)来自 IDE。如果您 运行 使用 Maven 构建会怎样?
总之,如果你愿意从Java11开始,你可以试试看。 Java EE 模块已删除,因此平台模块不会受到干扰。不过,我不确定是否可以在模块路径上添加 java.* 模块。
如果不是或者你更喜欢坚持 Java 10,你应该看看 upgreadable modules and the --upgrade-module-path
option。这样您就可以使用提供 JAX WS API 的 JAR 来替换平台模块。
就用Java11 :) 那里没有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>