寻求Java21兼容Maven插件:WSDL生成Stub及反向生成WSDL
兼容Java21的Jakarta EE Web服务Maven插件方案
一、生成Jakarta Stub类(JAXB)
推荐使用org.jvnet.jaxb.maven2:maven-jaxb2-plugin的0.16.0+稳定版,该插件已完成Jakarta EE迁移并适配Java21:
- 完全支持
jakarta.xml.bind.*包,替代旧的javax.xml.bind.* - 修复了Java20+中废弃的
new URL()相关API,改用NIO路径处理 - 维护活跃,提供完整官方文档与Javadoc
配置示例:
<plugin> <groupId>org.jvnet.jaxb.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <version>0.16.2</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <schemaDirectory>src/main/resources/schemas</schemaDirectory> <generatePackage>com.yourpackage.jaxb</generatePackage> <args> <arg>-Xjaxb-version=4.0</arg> </args> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> <version>4.0.2</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>4.0.5</version> </dependency> </dependencies> </plugin>
二、从Java类反向生成WSDL(JAX-WS)
选用com.sun.xml.ws:jaxws-maven-plugin的4.0.0+版本,适配Jakarta EE 10与Java21:
- 支持
jakarta.jws.*、jakarta.xml.ws.*等Jakarta规范包 - 移除对Java废弃API的依赖,完全符合Java21规范
- 官方维护,文档体系完善
配置示例:
<plugin> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-maven-plugin</artifactId> <version>4.0.2</version> <executions> <execution> <goals> <goal>wsgen</goal> </goals> <configuration> <sei>com.yourpackage.service.YourWebService</sei> <genWsdl>true</genWsdl> <destDir>target/wsdl</destDir> <packageName>com.yourpackage.wsdl</packageName> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>jakarta.xml.ws</groupId> <artifactId>jakarta.xml.ws-api</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-rt</artifactId> <version>4.0.2</version> </dependency> </dependencies> </plugin>
三、额外注意事项
- 确保Maven基于Java21运行,可在
pom.xml中指定:
<properties> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <maven.compiler.release>21</maven.compiler.release> </properties>
- 所有依赖需对应Jakarta EE 10版本,避免混用
javax与jakarta包
内容的提问来源于stack exchange,提问作者SkyBlackHawk
相关产品推荐
相关产品推荐

