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

Gradle 7.4.2升级Java17时Groovy版本冲突问题咨询

问题根因

Gradle发行版内置的Groovy仅用于运行Gradle自身的构建逻辑,不会自动注入项目的编译、测试类路径。你看到的Groovy 2.5.13版本是第三方依赖传递引入到测试编译类路径的旧版本,和适配Groovy 3.0的Spock版本不兼容,和Gradle内置的Groovy版本没有关系。

修复步骤
  • 第一步:显式引入Groovy插件,不要依赖隐式配置。在build.gradle的plugins块中添加Groovy插件声明:
plugins {
    id 'java'
    id 'groovy' // 负责编译Groovy、Spock测试代码
}
  • 第二步:在依赖块中显式声明和Spock版本匹配的Groovy依赖,同时排除Spock包内可能传递引入的Groovy,避免版本冲突:
sourceCompatibility = 17

dependencies {
    // 显式指定Groovy 3.0.9版本,和Spock 2.2-M1-groovy-3.0适配
    testImplementation 'org.codehaus.groovy:groovy-all:3.0.9'
    
    testImplementation ('org.spockframework:spock-core:2.2-M1-groovy-3.0') {
        exclude group: 'org.codehaus.groovy'
    }
    testImplementation ('org.spockframework:spock-spring:2.2-M1-groovy-3.0') {
        exclude group: 'org.codehaus.groovy'
    }
}
  • 第三步:添加全局依赖版本强制规则,杜绝其他第三方依赖传递拉取旧版Groovy:
configurations.all {
    resolutionStrategy {
        // 所有Groovy相关依赖强制锁定3.0.9版本
        force 'org.codehaus.groovy:groovy:3.0.9'
        force 'org.codehaus.groovy:groovy-all:3.0.9'
        force 'org.codehaus.groovy:groovy-xml:3.0.9'
        force 'org.codehaus.groovy:groovy-json:3.0.9'
        force 'org.codehaus.groovy:groovy-nio:3.0.9'
        force 'org.codehaus.groovy:groovy-macro:3.0.9'
    }
}
  • 第四步:清理旧缓存避免历史文件干扰,依次执行以下命令:
# 停止所有残留的Gradle守护进程
./gradlew --stop
# 清理项目本地构建产物
./gradlew clean

如果执行完上述配置后仍然报Groovy版本错误,手动删除本地Gradle缓存中的旧版Groovy包即可:

rm -rf ~/.gradle/caches/modules-2/files-2.1/org.codehaus.groovy/groovy/2.5.13
  • 第五步:重新执行构建验证
./gradlew clean test --no-daemon
验证方法

如果需要确认类路径下的Groovy版本是否正确,执行以下命令查看测试编译类路径的依赖树:

./gradlew dependencies --configuration testCompileClasspath | grep groovy

输出中所有Groovy相关依赖版本均为3.0.9即为配置正确。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:45:38