Gradle 对所有子项目的依赖

Gradle dependency on all subprojects

我们有以下项目结构

projectRoot
|>libs
| |>lib1
| |>lib2
| |>...
|>application

每个 libXapplication 我们都有一个 gradle 子项目。
*这是否有意义不应成为此问题的一部分

现在应用程序子项目将依赖于 libs-dir 中的所有子项目。 因此 application 中的 build.gradle 包含:

dependencies {
    implementation project(":libs:lib1");
    implementation project(":libs:lib2");
    implementation project(":libs:lib3");
}

这意味着,每当我们添加一个新的库模块时,我们还需要向该模块添加一个新行 build.gradle

如果可能的话,我想避免这种麻烦,并且有这样一行:

implementation project(":libs:*");

并且要乖。但它不是这样工作的。

有没有办法让一个项目自动依赖所有其他子项目,例如在特定目录中?

您可以使用以下表示法:

dependencies {
    implementation project(':libs').subprojects
}

这将定义对路径为 :libs 的项目的所有子项目的依赖。您可能认为您没有在 settings.gradle 中定义此子项目,但是 Gradle 子项目是使用树而不是平面列表组织的,因此必须存在路径为 :libs 的项目存在路径 :libs:lib1 的项目。查看 documentation on the include method 以了解有关此行为的详细信息:

// include two projects, 'foo' and 'foo:bar'
// directories are inferred by replacing ':' with '/'
include 'foo:bar'

请注意,subprojects(调用 getSubprojects)以递归方式工作。一旦您开始将子项目添加到您的库项目中,例如路径为 :libs:lib1:foo 的项目,它们也将用作您的应用程序项目的依赖项。