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

如何在build.gradle中以编程方式获取并约束传递依赖版本?

在build.gradle中编程式控制传递依赖版本

完全可以通过Gradle的依赖解析API实现你的需求——无需手动引入group:module,就能强制使用my-dependency-1:module:1.0.0所引入的传递依赖版本。以下是具体实现方案:

核心思路

通过解析指定主依赖(my-dependency-1:module:1.0.0)的依赖树,提取它引入的group:module版本,再通过Gradle的版本强制机制,让所有地方的group:module都使用这个版本。

Groovy实现示例

方式一:实时解析依赖版本

// 定义要追踪的主依赖坐标
def targetMainDependency = "my-dependency-1:module:1.0.0"

// 遍历所有配置,对目标传递依赖设置强制版本
configurations.all { config ->
    config.resolutionStrategy.eachDependency { details ->
        // 匹配目标传递依赖
        if (details.requested.group == 'group' && details.requested.name == 'module') {
            // 解析主依赖的依赖树,获取对应的传递依赖版本
            def resolvedVersion = project.dependencies.create(targetMainDependency)
                .resolve()
                .find { it.group == 'group' && it.name == 'module' }
                ?.version
            
            if (resolvedVersion) {
                details.useVersion(resolvedVersion)
                details.because "强制使用${targetMainDependency}引入的group:module版本"
            }
        }
    }
}

方式二:提前解析(更高效)

提前在项目评估完成后解析主依赖的传递依赖版本,避免每次依赖处理时重复解析:

def targetTransitiveVersion = null

// 项目评估完成后,解析主依赖的传递依赖版本
project.afterEvaluate {
    // 从compileClasspath配置中找到主依赖的传递依赖
    def mainDependency = project.configurations.compileClasspath.resolvedConfiguration.firstLevelModuleDependencies
        .find { 
            it.moduleGroup == 'my-dependency-1' && 
            it.moduleName == 'module' && 
            it.moduleVersion == '1.0.0' 
        }
    
    if (mainDependency) {
        targetTransitiveVersion = mainDependency.children
            .find { it.moduleGroup == 'group' && it.moduleName == 'module' }
            ?.moduleVersion
    }
}

// 对目标传递依赖设置强制版本
configurations.all {
    resolutionStrategy.eachDependency { details ->
        if (details.requested.group == 'group' && details.requested.name == 'module' && targetTransitiveVersion) {
            details.useVersion(targetTransitiveVersion)
            details.because "强制使用my-dependency-1:module:1.0.0引入的group:module版本"
        }
    }
}

注意事项

  • 确保my-dependency-1:module:1.0.0已经被正确引入到项目的依赖中,否则无法解析到对应的传递依赖版本。
  • 若使用Gradle 7+,需根据项目实际使用的依赖配置(如implementation)调整解析时的配置(比如compileClasspath可替换为runtimeClasspath或自定义配置)。
  • 该机制会强制所有依赖路径中的group:module使用指定版本,覆盖其他依赖引入的不同版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:23:01