Gradle 对所有子项目的依赖
Gradle dependency on all subprojects
我们有以下项目结构
projectRoot
|>libs
| |>lib1
| |>lib2
| |>...
|>application
每个 libX
和 application
我们都有一个 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
的项目,它们也将用作您的应用程序项目的依赖项。
我们有以下项目结构
projectRoot
|>libs
| |>lib1
| |>lib2
| |>...
|>application
每个 libX
和 application
我们都有一个 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
的项目,它们也将用作您的应用程序项目的依赖项。