我有以下多模块项目结构。
Root project 'reports-be'
+--- Project ':auth'
+--- Project ':builder'
| +--- Project ':builder:base'
| \--- Project ':builder:reporting'
\--- Project ':common'
当我运行
build
/builder 子项目的任务,我希望 build
将对所有子项目执行任务(对于 :builder:base
和 :builder:reporting
)。gradle clean :builder:build
但是 gradle 执行
build
仅针对子项目的任务 :builder
.根据Gradle documentation
build
应完成所有子项目的任务。为什么不发生?
附言我发现命令
gradle -p builder clean build
按我的预期工作。但我真的不明白第一次提到的 gradle 任务有什么问题。P.S.S.我有
build.gradle
在每个子项目和我的settings.gradle
好像rootProject.name = 'reports-be'
include 'common'
include 'builder'
include 'auth'
include 'builder:base'
include 'builder:reporting'
最佳答案
:builder:build
是任务的限定任务名称build
在项目中:builder
,因此只有这一项任务(及其依赖项)将被执行。所有(子)项目中的执行仅适用于不合格的任务名称,如 build
.您可以切换到builder
目录并运行gradle build
从那里开始,但是如果您想运行 clean
,这种方法将不起作用对于同一调用中的所有项目,使用包装器(gradlew
)时有点难看。据我所知,您的用例没有直接的解决方案。
如果我猜对了,:builder
project 只是一个用于组织目的的虚拟项目,不包含任何实际源代码或任何其他要构建的东西。在这种情况下,您可以使用 builder/build.gradle
中的任务依赖关系来解决您的问题。 :
task build {
dependsOn ':builder:base:build', ':builder:reporting:build'
}
关于Gradle 任务不会在所有子项目中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61914380/