执行wsimport任务报错:找不到com.sun.tool.ws.ant.WsImport类
问题:执行wsimport任务时找不到com.sun.tool.ws.ant.WsImport类
我用Spring Initializr创建了新项目,按照官方教程操作时,执行wsimport任务报错,提示找不到com.sun.tool.ws.ant.WsImport类。我的build.gradle配置和教程基本一致,仅添加了部分项目额外依赖,以下是配置文件和错误日志:
build.gradle 配置
buildscript { dependencies { classpath 'com.sun.xml.ws:jaxws-tools:3.0.0' } } plugins { id 'java' id 'org.springframework.boot' version '3.2.5' id 'io.spring.dependency-management' version '1.1.4' } group = 'br.com.acessetecnologia.msimportacaocdapb' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } ext.jaxwsSourceDir = "${buildDir}/generated/sources/jaxws" configurations { compileOnly { extendsFrom annotationProcessor } jaxws } repositories { mavenCentral() } task wsimport { description = 'Generate classes from wsdl using wsimport' doLast { project.mkdir(jaxwsSourceDir) ant { taskdef( name: 'wsimport', classname: 'com.sun.tool.ws.ant.WsImport', classpath: configurations.jaxws.asPath ) wsimport( keep: true, destdir: jaxwsSourceDir, extension: "true", verbose: true, wsdl: "${projectDir}/src/main/resources/pge.wsdl", xnocompile: true, package: "br.com.acessetecnologia.msimportacaocdapb" ) { xjcarg(value: "-XautoNameResolution") } } } } sourceSets { main { java.srcDirs += jaxwsSourceDir } } compileJava { dependsOn wsimport } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-rest' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-web-services' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' jaxws 'com.sun.xml.ws:jaxws-tools:3.0.0', 'jakarta.xml.ws:jakarta.xml.ws-api:3.0.0', 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.0', 'jakarta.activation:jakarta.activation-api:2.0.0', 'com.sun.xml.ws:jaxws-rt:3.0.0' } tasks.named('test') { useJUnitPlatform() }
错误日志
Execution failed for task ':wsimport'. taskdef class com.sun.tool.ws.ant.WsImport cannot be found using the classloader AntClassLoader[/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/com.sun.xml.ws/jaxws-tools/3.0.0/f6e72133e8eb7288b5b72745cfad491566defb8f/jaxws-tools-3.0.0.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/com.sun.xml.ws/jaxws-rt/3.0.0/d7daedbff650b8a158768c199293e9ec444682fb/jaxws-rt-3.0.0.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/jakarta.xml.ws/jakarta.xml.ws-api/3.0.0/ad24b3e5b9eaae5a2fa4af3e343e7c89588e8c3/jakarta.xml.ws-api-3.0.0.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/com.sun.xml.bind/jaxb-jxc/4.0.5/4da2bacf4ecbfd3504caf410d605236bd0a2a52c/jaxb-jxc-4.0.5.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/com.sun.xml.bind/jaxb-xjc/4.0.5/596cc40d3074baee5ab345c1e34a8f46c2a890cf/jaxb-xjc-4.0.5.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/com.sun.xml.bind/jaxb-impl/4.0.5/b70ad3db43ee72d7a35ae3c4d1d6d2e08ce7623/jaxb-impl-4.0.5.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/com.sun.xml.bind/jaxb-core/4.0.5/ad427d8777ae2495bfcb37069d611e8379867e6d/jaxb-core-4.0.5.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/jakarta.xml.bind/jakarta.xml.bind-api/3.0.0/9275db6e21287df61690989254a0b46d8d31e99a/jakarta.xml.bind-api-3.0.0.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/com.sun.xml.messaging.saaj/saaj-impl/3.0.3/767c56b728ab653247e7f6d5f7f0e6d827ff11ee/saaj-impl-3.0.3.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/jakarta.xml.soap/jakarta.xml.soap-api/3.0.1/f96df5961c8bb8260daddec1b07ee5757939a3a2/jakarta.xml.soap-api-3.0.1.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/com.sun.xml.stream.buffer/streambuffer/2.0.1/ed2cd5233d9a56c6c1ab7d432132dffd7bc23998/streambuffer-2.0.1.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/org.jvnet.staxex/stax-ex/2.1.0/33160568d70c01da407f8ba982bacf283d00ad4a/stax-ex-2.1.0.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/org.eclipse.angus/angus-activation/2.0.2/41f1e0ddd157c856926ed149ab837d110955a9fc/angus-activation-2.0.2.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/jakarta.activation/jakarta.activation-api-2.0.0/3432971015ceb6c2ef46489bdb5d3d7e24d20d75/jakarta.activation-api-2.0.0.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/com.sun.mail/jakarta.mail/2.0.0/409efff67e50a231b965c2247f7c92ab70d43044/jakarta.mail-2.0.0.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/com.sun.activation/jakarta.activation/2.0.0/f4e7519148dee347c7666f336210deedb8aca09d/jakarta.activation-2.0.0.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/jakarta.jws/jakarta.jws-api-3.0.0/af8955221689acfde96fbd4b2c1c270589bc6903/jakarta.jws-api-3.0.0.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/jakarta.annotation/jakarta.annotation-api-2.1.1/48b9bda22b091b1f48b13af03fe36db3be6e1ae3/jakarta.annotation-api-2.1.1.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/org.glassfish.ha/ha-api-3.1.12/59fbeca6cc196da8159e4957eabe49f23d1e691a/ha-api-3.1.12.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/org.glassfish.gmbal/gmbal-api-only/4.0.2/c830b509991c95141867f0e02621e92fdc785f0d/gmbal-api-only-4.0.2.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/org.glassfish.external/management-api/3.2.3/27374b34efeec7949b25729bf9eab89a221f375c/management-api-3.2.3.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/org.jvnet.mimepull/mimepull/1.9.13/a4f12d0da986cae55dd5c4a735b4fefc700eb266/mimepull-1.9.13.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/com.sun.xml.fastinfoset/FastInfoset/2.1.1/650c84348bbcf4461bd24d38e67f7a7ce687de24/FastInfoset-2.1.1.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/com.fasterxml.woodstox/woodstox-core/6.2.1/1600925b1ec7c7a3403c8f068ad62feead13132f/woodstox-core-6.2.1.jar:/home/thalys-gadelha/.gradle/caches/modules-2/files-2.1/org.codehaus.woodstox/stax2-api/4.2.1/a3f7325c52240418c2ba257b103c3c550e140c83/stax2-api-4.2.1.jar]
解决办法
原因
JAX-WS 3.0(适配Jakarta EE 9+)版本中,WsImport的Ant任务类路径和类名发生了变更,原com.sun.tool.ws.ant.WsImport类已不存在,且当前配置缺少专门的Ant任务依赖。
修复步骤
修改Ant任务类名
将taskdef中的classname改为com.sun.xml.ws.ant.WsImport:taskdef( name: 'wsimport', classname: 'com.sun.xml.ws.ant.WsImport', classpath: configurations.jaxws.asPath )添加Ant任务依赖
在jaxws依赖块中加入专门的Ant任务包:jaxws 'com.sun.xml.ws:jaxws-ant:3.0.0', 'com.sun.xml.ws:jaxws-tools:3.0.0', 'jakarta.xml.ws:jakarta.xml.ws-api:3.0.0', 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.0', 'jakarta.activation:jakarta.activation-api:2.0.0', 'com.sun.xml.ws:jaxws-rt:3.0.0'移除重复依赖
删除buildscript中的jaxws-tools依赖,避免类加载冲突:// 删掉这段代码 buildscript { dependencies { classpath 'com.sun.xml.ws:jaxws-tools:3.0.0' } }清理缓存重新构建
执行命令清理缓存并重新构建:./gradlew clean build --refresh-dependencies
内容的提问来源于stack exchange,提问作者Thalys Menezes
相关产品推荐
相关产品推荐

