基于JDK 17和Gradle 7.6从WSDL生成Stub的配置需求
适配JDK 17 + Gradle 7.6的WSDL Stub生成配置
针对JDK 17移除JAX-WS/JAXB模块导致的兼容性问题,以下是可直接使用的build.gradle配置,会在build/generated目录生成Stub类:
plugins { id 'java' } // 配置源集,将生成的代码目录加入源码路径 sourceSets { main { java { srcDirs += 'build/generated/jaxws' } } } // 引入兼容JDK 17的JAX-WS及JAXB依赖 dependencies { // JAX-WS API implementation 'jakarta.xml.ws:jakarta.xml.ws-api:4.0.0' // JAX-WS Runtime implementation 'com.sun.xml.ws:jaxws-rt:4.0.0' // JAXB API(JDK 17已移除,需单独引入) implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0' // JAXB Runtime implementation 'com.sun.xml.bind:jaxb-impl:4.0.0' // JAXB 核心模块与激活API implementation 'com.sun.xml.bind:jaxb-core:4.0.0' implementation 'jakarta.activation:jakarta.activation-api:2.1.0' } // 创建生成WSDL Stub的Gradle任务 task generateJaxwsStub(type: AntTask) { // 指定WSDL文件路径,替换为你的实际路径(支持单个文件或目录) def wsdlFile = file('src/main/resources/your-service.wsdl') // 配置Ant的jaxwsimport任务 ant.jaxwsimport( wsdl: wsdlFile.absolutePath, destdir: 'build/generated/jaxws', package: 'com.yourcompany.yourservice', // 替换为你要生成的包名 keep: true, // 保留生成的Java文件 verbose: true ) { // 引入依赖类路径,确保Ant任务能找到JAX-WS相关类 classpath { pathElement(location: configurations.compileClasspath.asPath) } } } // 确保生成任务在编译Java代码前执行 compileJava.dependsOn generateJaxwsStub // 清理时删除生成的目录 clean.doLast { delete file('build/generated/jaxws') }
关键配置说明
- 依赖版本:选用
jakarta.xml.ws和com.sun.xml.ws的4.x版本,完全兼容JDK 17,解决旧版本依赖与JDK 17的模块冲突问题。 - 生成目录:指定
build/generated/jaxws作为输出目录,并将其加入源集,确保编译时能识别生成的类。 - 任务关联:通过
compileJava.dependsOn确保Stub生成在编译前完成,避免编译错误。 - WSDL路径:替换
src/main/resources/your-service.wsdl为你的实际WSDL文件路径,若有多个WSDL,可改为目录路径并配置wsdlDirectory参数。
使用时只需替换WSDL路径和包名,执行./gradlew generateJaxwsStub即可生成Stub,或直接执行./gradlew build自动完成生成+编译流程。
内容的提问来源于stack exchange,提问作者Sumit
相关产品推荐
相关产品推荐

