You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java 10中java.xml.ws替代方案冲突问题排查与解决

解决JDK废弃java.xml.ws模块与jaxws-ri依赖的冲突问题

错误原因解析

你遇到的错误本质是模块化路径冲突

  • 在Java 9及以上版本中,java.xml.ws是JDK自带的废弃模块,从Java 11开始甚至被完全移除。
  • 当你在module-info.java中声明requires java.xml.ws;时,JVM会优先尝试加载JDK自带的这个模块,但你同时又引入了第三方的jaxws-ri实现——两者提供的核心包(比如javax.xml.ws.*javax.jws.*)完全一致,模块化系统不允许这种重复依赖,因此抛出错误。

修复步骤

1. 调整module-info.java配置

直接移除requires java.xml.ws;,替换为依赖jaxws-ri的模块。jaxws-ri 2.3.0的模块名称是com.sun.xml.ws.jaxws_ri,所以你的模块声明应该改成:

module your.project.module {
    // 依赖jaxws-ri的完整模块,会自动传递依赖所需的API和实现
    requires com.sun.xml.ws.jaxws_ri;
    
    // 如果你的代码直接用到了API包,也可以单独依赖API模块(可选)
    // requires javax.xml.ws.api;
}

2. 确保Maven依赖配置正确

确认你的pom.xml中引入的jaxws-ri依赖是完整的,推荐使用pom类型的依赖来自动引入所有子模块:

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

3. 额外适配Java 11+(如果适用)

如果你的项目运行在Java 11或更高版本,JDK已经完全移除了java.xml.ws模块,此时还需要确保你的Maven依赖中包含了JDK缺失的相关API(jaxws-ri的pom已经包含了这些,所以一般不需要额外添加),但如果遇到类找不到的问题,可以单独添加API依赖:

<dependency>
    <groupId>javax.xml.ws</groupId>
    <artifactId>jaxws-api</artifactId>
    <version>2.3.1</version>
</dependency>

验证

修改完成后,重新编译项目:

  • 模块化系统会优先加载你引入的jaxws-ri实现,而不是JDK自带的废弃模块(如果存在的话)。
  • 检查代码中所有javax.xml.ws.*相关的类是否正常引用,没有编译错误。

内容的提问来源于stack exchange,提问作者nllsdfx

火山引擎 最新活动