
jdk 17 已彻底移除 `wsgen` 等 jax-ws 工具(自 jdk 11 起通过 jep 320 废弃),开发者需改用 maven 插件(如 `jaxws-maven-plugin`)或独立库实现 wsdl 到 java 代码的生成与 web 服务构建。
wsgen 是 Java SE 6–8 中用于根据已有的 Java 类(带 @WebService 注解)生成 WSDL 和配套 JAXB 绑定代码的命令行工具,常用于 JAX-WS 开发流程。然而,从 JDK 11 开始,Oracle 依据 JEP 320: Remove the Java EE and CORBA Modules 正式将包括 jdk.xml.ws(含 wsgen、wsimport)、java.xml.bind(JAXB)、java.corba 等共 9 个企业级模块标记为 deprecated,并在 JDK 17(LTS)中完全移除。因此,无论 Windows、Linux 或 macOS,所有标准 JDK 17+ 发行版的 bin/ 目录下均不再提供 wsgen.exe 或 wsgen 可执行文件。
✅ 推荐替代方案:使用 jaxws-maven-plugin(Mojohaus)
该插件是目前最主流、维护活跃的 wsgen/wsimport 替代工具,支持 JDK 11–21,兼容 Maven 3.6+。以下为典型配置示例(pom.xml):
org.codehaus.mojo jaxws-maven-plugin 2.6.2 generate-wsdl generate-sources wsgen com.example.MyWebService true true true ${project.build.directory}/generated-sources/wsgen
运行 mvn generate-sources 即可自动生成 WSDL 文件及配套的 wsdl 目录和 SEI stub 类。
⚠️ 注意事项与最佳实践:
- 不要回退 JDK 版本:为兼容 wsgen 而降级至 JDK 8 不仅存在安全风险,更违背长期维护与现代化开发原则;
-
显式引入依赖:若项目仍需 JAXB 或 JAX-WS 运行时(如 javax.jws.WebService),需手动添加 Maven 依赖:
jakarta.xml.ws jakarta.xml.ws-api 4.0.0 com.sun.xml.ws jaxws-rt 4.0.3 - 面向 Jakarta EE 迁移:注意包名已从 javax.* 升级为 jakarta.*(JAX-WS 3.0+),旧注解(如 @javax.jws.WebService)需替换为 @jakarta.jws.WebService;
- 构建即代码生成:将 wsgen 集成进 Maven 生命周期(如 generate-sources),确保生成代码纳入编译流程,避免手动操作导致不一致。
总结:wsgen 的消失并非功能倒退,而是 Java 平台向模块化、轻量化演进的关键一步。通过标准化构建工具链(Maven/Gradle + 社区插件),反而提升了可重复性、跨环境一致性与持续集成友好度。拥抱插件化方案,是现代 Java Web 服务开发的必经之路。










