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

JDK11迁移时Gradle构建报NoClassDefFoundError问题求助

问题排查与解决办法

这个问题我之前帮不少开发者排查过,核心原因是Groovy自带的groovy.xml.jaxb.JaxbGroovyMethods类依赖JAXB API,而JDK11彻底移除了JDK内置的JAXB模块。虽然你已经添加了第三方JAXB依赖,但还有几个关键配置遗漏了:

1. 升级Groovy到兼容JDK11的版本

旧版本的Groovy(比如2.4.x及更早)对JDK9+的模块系统适配很差,完全没考虑JAXB被移除的情况。你得把Groovy升级到2.5.x及以上的稳定版,新版本的Groovy已经做了适配,会自动识别你引入的第三方JAXB库,而不是硬依赖JDK内置的模块。

2. 补全JAXB相关的完整依赖

你漏了一个关键依赖:javax.activation:javax.activation-api,JAXB底层依赖这个组件,而JDK11也把它移除了。另外建议把JAXB版本升级到2.3.1(比2.3.0兼容性更好),完整的依赖配置应该是这样的:

dependencies {
    implementation 'javax.xml.bind:jaxb-api:2.3.1'
    implementation 'com.sun.xml.bind:jaxb-impl:2.3.1'
    implementation 'com.sun.xml.bind:jaxb-core:2.3.0'
    implementation 'javax.activation:javax.activation-api:1.2.0' // 这个是你漏掉的核心依赖
}

如果你的构建脚本本身也用到了Groovy的JAXB方法,记得在buildscript的dependencies里也加上这些依赖。

3. 移除旧的JDK模块参数

既然已经切换到第三方JAXB依赖,之前在JavaCompile里加的--add-modules参数就没必要留着了,反而可能和第三方依赖冲突,记得删掉:

tasks.withType(JavaCompile) {
    options.compilerArgs.removeAll { it.startsWith('--add-modules=java.xml.bind') }
}

最后验证

做完上面的配置后,先清理旧的构建缓存再重新构建:

./gradlew clean build

这样应该就能解决NoClassDefFoundError的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:44:10