如何替换--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以及它们的运行时实现,你得把整套依赖都补上才能摆脱这个启动参数。
具体步骤如下:
- 添加完整的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>
- 调整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>
- 移除启动参数中的
--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
相关产品推荐
相关产品推荐

