You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移至Java 17后,如何修复Gradle从XSD生成Java类的问题?

解决Java 17迁移中XJC生成类的javax/jakarta命名空间冲突问题

问题根源

你使用的org.unbroken-dome.xjc 2.0.0版本基于JAXB 2.x开发,仅支持生成依赖javax.xml.bind包的代码;而Java 17已完全切换到Jakarta EE规范的jakarta.xml.bind命名空间,旧插件既无法生成适配新命名空间的代码,也无法解析Jakarta版本的XJB绑定文件,因此出现编译报错和解析失败问题。

解决方案一:升级org.unbroken-dome.xjc插件到Jakarta兼容版本

1. 更新插件版本

在build.gradle的插件块中替换为支持Jakarta的最新稳定版(当前为4.0.0):

plugins {
    id 'org.unbroken-dome.xjc' version '4.0.0'
}

2. 配置XJC任务生成Jakarta命名空间代码

添加任务配置,指定使用Jakarta JAXB版本:

xjc {
    // 与Jakarta JAXB依赖版本保持一致
    toolVersion = '4.0.0'
    // 自定义生成类的包名
    generatePackage = 'com.your.project.generated'
    // 保留扩展参数(如自定义绑定规则需要)
    args = ['-extension']
}

3. 完善依赖配置

引入Jakarta JAXB的API和运行时实现:

dependencies {
    implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0'
    // 运行时需依赖JAXB实现,此处使用GlassFish官方实现
    runtimeOnly 'org.glassfish.jaxb:jaxb-runtime:4.0.0'
}

4. 保留修正后的XJB绑定文件

你修改的Jakarta命名空间配置是正确的,确保版本对应3.0+即可:

<jaxb:bindings xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns:xjc="https://jakarta.ee/xml/ns/jaxb/xjc"
               jaxb:version="3.0">
    <!-- 你的自定义绑定规则 -->
</jaxb:bindings>

解决方案二:替换为GlassFish官方JAXB Gradle插件

如果升级unbroken-dome插件仍有解析问题,可尝试使用Jakarta EE官方维护的插件:

1. 添加插件

plugins {
    id 'org.glassfish.jaxb.jaxb-xjc' version '4.0.0'
}

2. 配置XJC任务

xjc {
    // 指定XSD文件所在目录
    source = fileTree('src/main/resources/xsd') { include '*.xsd' }
    // 指定绑定文件路径
    binding = file('src/main/resources/bindings.xjb')
    // 生成类的包名
    packageName = 'com.your.project.generated'
}

3. 依赖配置与方案一相同

dependencies {
    implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0'
    runtimeOnly 'org.glassfish.jaxb:jaxb-runtime:4.0.0'
}

验证执行

运行gradle xjc任务,生成的Java类将自动使用jakarta.xml.bind.annotation等新命名空间包,解决原有的编译报错问题。

内容的提问来源于stack exchange,提问作者StarMcSnow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:43:31