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

Gradle包含构建:实现基于版本号的依赖替换

基于版本匹配的Gradle Included Build依赖替换方案

要实现仅当依赖版本与本地项目版本一致时才用included build替换,否则走默认仓库搜索的需求,无需修改子项目代码,只需在元仓库的settings.gradle.kts中通过自定义dependencySubstitution逻辑实现:

核心实现代码

// 定义所有要纳入的独立项目本地路径
val includedBuildPaths = listOf(
    "../your-lib-project-1",
    "../your-lib-project-2",
    "../your-app-project"
)

includedBuildPaths.forEach { buildPath ->
    includeBuild(buildPath) {
        dependencySubstitution {
            // 获取当前纳入构建的所有本地项目
            val localBuildProjects = this@includeBuild.projects

            // 拦截所有依赖请求,按需替换
            all {
                if (requested is ModuleComponentSelector) {
                    val reqSelector = requested as ModuleComponentSelector
                    // 查找本地group和name匹配的项目
                    val matchingLocalProject = localBuildProjects.firstOrNull {
                        it.group.toString() == reqSelector.group && it.name == reqSelector.module
                    }

                    if (matchingLocalProject != null) {
                        val localVersion = matchingLocalProject.version.toString()
                        // 仅当请求版本与本地项目版本完全一致时,才替换成本地项目
                        if (reqSelector.version == localVersion) {
                            substitute(requested).using(matchingLocalProject)
                        }
                    }
                    // 版本不匹配时不做替换,Gradle自动走mavenLocal/远程仓库拉取对应版本
                }
            }
        }
    }
}

逻辑说明

  1. 遍历纳入构建:先列出所有独立项目的本地路径,逐个通过includeBuild纳入元仓库
  2. 拦截依赖请求:通过all回调捕获所有依赖解析请求,判断请求是否为带版本的模块组件(ModuleComponentSelector)
  3. 版本匹配判断:找到本地group和name匹配的项目后,对比请求版本与本地项目版本,仅在完全一致时触发替换
  4. 默认逻辑 fallback:版本不匹配时不干预,Gradle会自动使用配置的仓库(mavenLocal/远程)查找对应版本的工件

注意事项

  • 确保各子项目的version属性在自身构建脚本中正确配置,元仓库才能读取到准确的版本值
  • 动态版本(如1.0-SNAPSHOT)同样适用,只要依赖请求的版本字符串与本地项目版本完全一致就会触发替换
  • 所有配置仅在元仓库的settings.gradle.kts中完成,无需修改任何子项目代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:28:18