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

Gradle复合构建中同名子项目冲突问题及解决咨询

解决Gradle复合构建中同名模块冲突的问题

核心解决方案:给纳入的构建添加模块前缀

Gradle 7.1及以上版本支持直接为纳入的复合构建指定modulePrefix,自动给该构建下所有模块名称添加前缀,彻底解决同名冲突。修改app/settings.gradle.kt如下:

includeBuild("../audio") {
    modulePrefix = "audio"
}

includeBuild("../video") {
    modulePrefix = "video"
}

配置后,原audio/lib模块的路径会变为:audio:lib,video/lib变为:video:lib,两者不再冲突。后续在app项目中依赖时,直接使用带前缀的模块名即可,比如:

implementation(project(":audio:lib"))
implementation(project(":video:lib"))

替代方案:手动映射模块别名(适用于旧版Gradle)

如果使用Gradle 7.1以下版本,可通过dependencySubstitution手动将同名模块映射为不同别名:

  1. 先修改其中一个子项目的模块名称,比如在audio/settings.gradle.kt中,将原include(":lib")改为:
include(":audio-lib")
project(":audio-lib").projectDir = file("lib")
  1. 然后在app/settings.gradle.kt中配置依赖替换:
includeBuild("../audio") {
    dependencySubstitution {
        substitute(module(":lib")).using(project(":audio-lib"))
    }
}

includeBuild("../video") // 保留原:lib模块

这样app项目中可分别依赖:audio-lib和:lib(对应video的模块)。

补充方案:修改子项目发布名称

如果不想改动复合构建配置,也可以直接修改子项目的构件名称避免依赖混淆。比如在audio/lib/build.gradle.kt中添加:

archivesBaseName = "audio-lib"

但这种方法仅改变构件名称,模块路径仍为:lib,无法解决复合构建中的路径冲突,仅作为补充使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:02:11