Gradle插件io.mateo.cxf-codegen 1.2.0是否支持Spring Boot 3?
关于io.mateo.cxf-codegen 1.2.0与Spring Boot 3的兼容性及JAXB异常解决
io.mateo.cxf-codegen 1.2.0支持Spring Boot 3,但你遇到的javax.xml.bind.JAXBException类找不到问题,根源在于代码生成阶段的依赖配置不匹配——Spring Boot 3和CXF 4.x都基于Jakarta EE API(包前缀为jakarta.*),而错误中引用的是旧Java EE的javax.*包。以下是具体解决步骤:
问题分析
CXF 4.x已完全迁移到Jakarta EE规范,代码生成过程需要依赖Jakarta版本的JAXB API,但你的配置仅将Jakarta JAXB依赖添加到项目的implementation配置中,并未确保插件的代码生成classpath包含这些依赖,导致生成阶段仍在尝试加载旧的javax.xml.bind类。
解决配置
为插件代码生成任务配置Jakarta依赖
在Gradle构建脚本中,单独定义一个配置用于插件代码生成的依赖,并将其添加到cxfCodeGen任务的classpath中:// 定义专用配置用于代码生成阶段的JAXB依赖 configurations { cxfCodeGen } dependencies { // 项目依赖保持不变 implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0' implementation 'org.glassfish.jaxb:jaxb-runtime:4.0.0' // 代码生成阶段需要的依赖(包括CXF代码生成器和Jakarta JAXB) cxfCodeGen 'org.apache.cxf:cxf-codegen-plugin:4.0.0' cxfCodeGen 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0' cxfCodeGen 'org.glassfish.jaxb:jaxb-runtime:4.0.0' } cxfCodeGen { cxfVersion = '4.0.0' // 明确指定CXF版本与你使用的一致 tasks { generate { wsdl = file('src/main/resources/your.wsdl') // 替换为你的WSDL路径 outputDir = file("$buildDir/generated-sources/cxf") classpath configurations.cxfCodeGen // 将专用配置加入代码生成classpath } } }强制排除旧javax依赖
检查项目依赖树,确保没有其他依赖引入旧的javax.xml.bind包。可以通过./gradlew dependencies命令查看依赖树,若发现冲突,在对应依赖上添加排除规则:implementation('some-dependency') { exclude group: 'javax.xml.bind', module: 'jaxb-api' }验证代码生成配置
确保WSDL生成的代码使用Jakarta注解而非javax注解。如果WSDL中有自定义绑定文件,需将绑定中的javax.xml.bind替换为jakarta.xml.bind,例如:<!-- 替换前 --> <xjc:bindings xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" version="2.1"> <!-- 替换后 --> <xjc:bindings xmlns:xjc="https://jakarta.ee/xml/ns/jaxb/xjc" xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb" version="3.0">
内容的提问来源于stack exchange,提问作者Rajesh kothari
相关产品推荐
相关产品推荐

