Gradle中Resolution Strategy配置未生效,求排查方案
Gradle 7.5依赖替换/强制生效失败排查
我在使用Gradle 7.5版本构建项目时,遇到部分依赖、传递依赖甚至深层传递依赖被公司Artifactory服务器拦截的问题,目前已有对应的可用替代版本。查阅文档后尝试通过resolutionStrategy配置进行版本替换或强制,但所有配置均未生效,构建仍提示无法获取被拦截的依赖。
我的配置代码如下:
configurations.all { resolutionStrategy { substitute module('org.mozilla:rhino:1.7R4') using module('org.mozilla:rhino:1.7.7') substitute module('org.yaml:snakeyaml:1.30') using module('org.yaml:snakeyaml:1.33') substitute module('com.google.javascript:closure-compiler-unshaded:v20210106') using module('com.google.javascript:closure-compiler-unshaded:v20200614') //force 'org.mozilla:rhino:1.7.7' //force 'org.yaml:snakeyaml:1.33' //force 'com.google.javascript:closure-compiler-unshaded:v20200614' //forcedModules = ['org.mozilla:rhino:1.7.7', 'org.yaml:snakeyaml:1.33', 'com.google.javascript:closure-compiler-unshaded:v20200614'] } }
以下是可能的排查方向和解决方法:
- 确认配置覆盖范围:
configurations.all理论上覆盖所有配置,但部分插件(如Android的implementation对应compileClasspath配置)可能需要显式指定关键配置来确保生效,比如针对编译和运行时类路径单独配置:configurations.compileClasspath { resolutionStrategy { substitute module('org.mozilla:rhino:1.7R4') using module('org.mozilla:rhino:1.7.7') // 其他替换/强制规则 } } configurations.runtimeClasspath { resolutionStrategy { substitute module('org.mozilla:rhino:1.7R4') using module('org.mozilla:rhino:1.7.7') // 其他替换/强制规则 } } - 强制刷新依赖缓存:Gradle可能缓存了旧的依赖解析结果,执行
./gradlew clean build --refresh-dependencies命令,清除本地缓存并重新解析所有依赖。 - 核对依赖坐标准确性:
substitute和force规则要求依赖坐标完全匹配,建议执行./gradlew dependencies导出完整依赖树,确认被拦截依赖的精确坐标(包括版本号的大小写、前缀后缀),确保配置中的坐标和实际依赖树一致。 - 检查Artifactory全局规则:如果公司Artifactory的虚拟仓库设置了全局依赖替换或版本管控规则,可能会覆盖本地Gradle的
resolutionStrategy配置,需要确认Artifactory是否有此类优先级更高的规则。 - 优化
substitute语法:尝试使用更灵活的版本替换语法,比如针对模块组和名匹配,指定目标版本:substitute module('org.mozilla:rhino') using module('org.mozilla:rhino') withVersion('1.7.7') - 排查插件冲突:部分第三方依赖管理插件可能会修改Gradle的依赖解析策略,检查项目中是否引入了此类插件,暂时禁用后测试配置是否生效。
内容的提问来源于stack exchange,提问作者Jim Gough
相关产品推荐
相关产品推荐

