Gradle 复合构建投掷"Failed to get Gradle name for :module"



我们有一组由不同团队开发的库,并分别推送到不同的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-amodule-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

相关内容

最新更新