我们有一个由不同团队开发的库集合,这些库分别被推送到不同的Git存储库。为了最大限度地减少发布到本地Maven存储库或发布快照版本的麻烦,我们将根项目放在一起,以包含所有这些带有Gradle依赖项替换的库。
其结构如下:
- root (Git-root)
...
- modules
- module-a (Git-module-a)
- a-core
- build.gradle.kts
- a-data
- build.gradle.kts
- settings.gradle.kts
- module-b (Git-module-b)
- b-core
- build.gradle.kts
- b-data
- build.gradle.kts
- settings.gradle.kts
- settings.gradle.kts
- settings.gradle.kts
这有点混乱,但是module-a
和module-b
作为git子模块包含在root
项目的modules
文件夹中。
Gradle文件如下所示:
settings.gradle.kts
rootProject.name = "project-root"
includeBuild("modules")
模块/设置. gradle. kts
rootProject.name = "modules"
includeBuild("module-a")
includeBuild("module-b")
模块/模块-a/设置. gradle. kts
rootProject.name = "module-a"
include("a-core")
include("a-data")
模块/模块-b/设置. gradle. kts
rootProject.name = "module-b"
include("b-core")
include("b-data")
为了说明原因,我们假设module-b:b-core
依赖于module-a:a-core
库。
问题是,当我运行这个构建时,它返回以下消息:
Multiple build operations failed.
Failed to get Gradle name for :a-core
Failed to get Gradle name for :a-data
Failed to get Gradle name for :b-core
Failed to get Gradle name for :b-data
我不知道自己想要达到的目标是否有可能实现,但我在文档中找不到任何东西,看起来我们总是非常接近我们想要达到的目标,但要达到目标几乎是不可能的。
你们知道我错过了什么吗?
1条答案
按热度按时间ozxc1zmp1#
错误消息来自AGP
ModelBuilder.getBuildeName()
原因是复合构建中的大多数“底层”项目(“a-core”、“a-data”、“b-core”和“b-data”)都将
gradle.rootProject.parent
设置为“顶层”项目(“project-root”),而不是它们的直接父项目(“module-a”和“module-b”)。你可以检查一下
println("${project.name} parent is ${project.gradle.parent?.rootProject?.name}")
在所有项目的build.gradle.kts中运行同步
这是Gradle还是AGP问题,取决于
root
行为是否正确或是否存在Gradle错误。我已经在Gradle项目中创建了关于这个案例的the issue。请看Gradle团队的回答:)
作为临时解决方案,在
modules/settings.gradle.kts
中添加includeBuild("a-core")
和其他底层项目。如果仍然会出错,请尝试将其添加到最顶层的“project-root”settings.gradle.kts
中。