我们有一组由不同团队开发的库,并分别推送到不同的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")
模块/settings.gradle.kts
rootProject.name = "modules"
includeBuild("module-a")
includeBuild("module-b")
模块/模块是一个settings.gradle.kts
rootProject.name = "module-a"
include("a-core")
include("a-data")
模块/模块b/settings.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
我不知道我想要实现的是否可能,但是我在文档中找不到任何东西。看起来我们总是离我们想要的东西很近,但要到达那里几乎是不可能的。
你们知道我错过了什么吗?错误消息来自AGPModelBuilder.getBuildName()
原因是大多数"bottom"组合构建项目("a-core","a-data","b-core")和"b-data")将gradle.rootProject.parent
设置为"topmost"项目(" Project -root"),而不是它们的直接父类("module- "one_answers"module-b"。你可以把println("${project.name} parent is ${project.gradle.parent?.rootProject?.name}")
放到所有项目的build.gradle.kts中,然后运行sync
它是Gradle还是AGP问题,取决于这样的root
行为是正确的还是Gradle错误。
我在gradle项目中创建了这个问题。看看gradle团队的回答:)
作为临时解决方案,在modules/settings.gradle.kts
中添加includeBuild("a-core")
和其他底层项目。如果仍然会出现错误,尝试将其添加到最上面的project-root"settings.gradle.kts
。