将jaxws-maven-plugin从Java 7迁移至Java 17遇依赖问题求助
Java 17 下迁移 jaxws-maven-plugin 解决方案
你遇到的问题根源在于旧版插件依赖的 com.sun.xml.ws:jaxws-tools:2.2.8 是非常老旧的版本,完全不兼容 Java 17,而且 Maven 解析其 POM 时会因为父项目依赖缺失或不兼容导致错误。以下是针对 Java 17 的有效迁移方案:
替换为兼容 Java 17 的插件配置
直接使用支持 Java 11+ 的最新版 jaxws-maven-plugin,并显式指定兼容 Java 17 的 jaxws-tools 依赖:
<plugin> <groupId>org.jvnet.jax-ws-commons</groupId> <artifactId>jaxws-maven-plugin</artifactId> <version>3.0.0</version> <!-- 适配 Java 11+,包括 Java 17 --> <executions> <execution> <id>1</id> <goals> <goal>wsimport</goal> </goals> <configuration> <xadditionalHeaders>true</xadditionalHeaders> <wsdlDirectory>src/main/resources/wsdl</wsdlDirectory> <target>2.1</target> <!-- 解决 Java 17 模块化访问限制 --> <vmArgs> <vmArg>--add-modules=java.se</vmArg> <vmArg>--add-opens=java.base/java.lang=ALL-UNNAMED</vmArg> <vmArg>--add-opens=java.base/java.io=ALL-UNNAMED</vmArg> <vmArg>--add-opens=java.base/java.util=ALL-UNNAMED</vmArg> </vmArgs> </configuration> </execution> </executions> <!-- 强制使用兼容 Java 17 的 jaxws-tools 版本 --> <dependencies> <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-tools</artifactId> <version>4.0.2</version> <!-- 完全支持 Java 17 --> <scope>runtime</scope> </dependency> </dependencies> </plugin>
关键调整说明
- 升级插件版本:3.0.0 版本是官方针对 Java 11+ 重构的版本,解决了旧版本在高版本 Java 下的兼容性问题。
- 移除
executable配置:新版本会自动使用依赖的jaxws-tools,无需手动指定路径,避免版本不匹配。 - 添加模块化参数:Java 17 严格限制了内部 API 的访问,
vmArgs中的参数用于开放jaxws-tools所需的内部模块访问权限。 - 显式指定
jaxws-tools版本:强制拉取支持 Java 17 的 4.0.2 版本,彻底避免 Maven 解析旧版 2.2.8 时的 POM 错误。
额外必备配置
- 升级 Maven 版本:确保使用 Maven 3.8.1 及以上版本,旧版 Maven 对 Java 17 的依赖解析支持不足。
- 配置编译插件:将项目编译的
source和target设置为 17:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>17</source> <target>17</target> <encoding>UTF-8</encoding> </configuration> </plugin>
- 清理本地仓库:如果之前拉取过旧版依赖,删除
~/.m2/repository/com/sun/xml/ws目录,重新执行mvn clean install拉取新依赖。
内容的提问来源于stack exchange,提问作者Lore
相关产品推荐
相关产品推荐

