使用wsgen生成WSDL文件报错:找不到主类com.sun.tools.internal.ws.WsGen
解决wsgen无法找到com.sun.tools.internal.ws.WsGen的问题
错误原因
com.sun.tools.internal.ws.WsGen 是JDK 8及更早版本中JAX-WS工具链的类,从JDK 9开始,JAX-WS被从JDK核心模块中拆分出来,JDK 11及之后更是彻底移除了自带的JAX-WS工具,直接执行wsgen命令就会出现类找不到的报错。
解决方案
方案1:切换到JDK 8执行命令
如果环境允许,直接使用JDK 8运行你的wsgen命令:
wsgen -wsdl -cp build/classes/java/main/ -d build/classes/java/main/ -r src/main/resources/ org.example.Commands
JDK 8自带完整的JAX-WS工具链,能正常找到目标类。
方案2:使用Maven插件生成WSDL(推荐JDK 9+使用)
在项目的pom.xml中添加jaxws-maven-plugin插件,通过Maven管理依赖并生成WSDL:
<build> <plugins> <plugin> <groupId>org.jvnet.jax-ws-commons</groupId> <artifactId>jaxws-maven-plugin</artifactId> <version>2.3</version> <executions> <execution> <goals> <goal>wsgen</goal> </goals> <configuration> <!-- 指定服务端点接口(SEI) --> <sei>org.example.Commands</sei> <!-- WSDL输出目录 --> <wsdlDirectory>src/main/resources</wsdlDirectory> <!-- 类路径配置 --> <classpathElements> <classpathElement>${project.build.outputDirectory}</classpathElement> </classpathElements> </configuration> </execution> </executions> </plugin> </plugins> </build>
添加完成后,执行以下Maven命令即可生成WSDL:
mvn jaxws:wsgen
方案3:手动添加JAX-WS依赖到类路径
如果坚持用命令行执行,需要下载JAX-WS相关依赖(如jaxws-tools.jar),将其加入类路径后执行:
java -cp "build/classes/java/main/:path/to/jaxws-tools.jar" com.sun.tools.ws.WsGen -wsdl -d build/classes/java/main/ -r src/main/resources/ org.example.Commands
注意:这里的类名是com.sun.tools.ws.WsGen(去掉了internal),是JAX-WS独立包中的正确类路径。
内容的提问来源于stack exchange,提问作者CloudMinded
相关产品推荐
相关产品推荐

