You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何替换--add-modules java.xml.ws?SpringBoot2.0+Java9迁移问题

解决Java 9 + Spring Boot 2.0中无法移除--add-modules java.xml.ws的问题

我之前在迁移项目到Java 9和Spring Boot 2.0时也碰到过一模一样的问题——只加jaxb-api根本不够,因为java.xml.ws是个聚合模块,包含了JAX-WS API、JAXB API以及它们的运行时实现,你得把整套依赖都补上才能摆脱这个启动参数。

具体步骤如下:

  1. 添加完整的JAX-WS相关依赖
    只加jaxb-api只是引入了API规范,没有实现类,JVM还是会去JDK模块里找,所以得把API+实现都加上。在你的pom.xml里添加这些依赖:
<!-- JAX-WS API 规范 -->
<dependency>
    <groupId>javax.xml.ws</groupId>
    <artifactId>jaxws-api</artifactId>
    <version>2.3.1</version>
</dependency>
<!-- JAXB API 规范 -->
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<!-- JAXB 运行时实现 -->
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.1</version>
    <scope>runtime</scope>
</dependency>
<!-- JAX-WS 运行时实现 -->
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>2.3.1</version>
    <exclusions>
        <!-- 排除自带的jaxb-api,避免版本冲突 -->
        <exclusion>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- JavaBeans Activation Framework (Java 9+ 已从JDK移除) -->
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>
  1. 调整Maven编译器配置
    确保你的maven-compiler-plugin配置正确指向Java 9,并且不再需要--add-modules参数:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <release>9</release>
        <!-- 移除原来的--add-modules配置 -->
    </configuration>
</plugin>
  1. 移除启动参数中的--add-modules java.xml.ws
    不管是IDE的启动配置还是Maven命令行参数,都把这个参数删掉。

为什么这样能解决?

Java 9按照JEP 320的要求,把java.xml.ws这类Java EE相关模块标记为废弃并逐步移除,所以这些模块的类不再默认在类路径/模块路径里。通过添加上面的依赖,我们把这些API和实现从外部库引入,JVM会优先从类路径加载这些类,自然就不需要再通过--add-modules去启用JDK里的废弃模块了。

如果还是有问题,检查下项目里有没有直接引用java.xml.ws模块下的类(比如javax.xml.ws.WebService),确认这些类都来自你添加的外部依赖,而不是JDK的模块。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:11:55