Gradle任务don';t在所有子项目中运行

Gradle任务don';t在所有子项目中运行,gradle,multi-project,gradle-task,Gradle,Multi Project,Gradle Task,我有以下多模块项目结构 Root project 'reports-be' +--- Project ':auth' +--- Project ':builder' | +--- Project ':builder:base' | \--- Project ':builder:reporting' \--- Project ':common' 当我为/builder子项目运行build任务时,我希望所有子项目都会执行build任务(对于:builder:base和:builder:

我有以下多模块项目结构

Root project 'reports-be'
+--- Project ':auth'
+--- Project ':builder'
|    +--- Project ':builder:base'
|    \--- Project ':builder:reporting'
\--- Project ':common'
当我为/builder子项目运行
build
任务时,我希望所有子项目都会执行
build
任务(对于
:builder:base
:builder:reporting

但是gradle只对子项目
:builder
执行
构建
任务。
根据
build
的要求,应完成所有子项目的任务

为什么没有发生

另外,我发现命令
gradle-pbuildercleanbuild
的工作原理与我预期的一样。但我真的不明白第一次提到的gradle任务有什么问题

另外,我在每个子项目和我的
设置中都有
build.gradle

rootProject.name = 'reports-be'
include 'common'
include 'builder'
include 'auth'
include 'builder:base'
include 'builder:reporting'

:builder:build
是项目
:builder
中任务
build
的限定任务名称,因此只执行这一个任务(及其依赖项)。所有(子)项目中的执行只能针对非限定的任务名称,如
build
。您可以切换到
builder
目录并从那里运行
gradle build
,但是,如果您希望在同一调用中为所有项目运行
clean
,这种方法将不起作用,并且在使用包装器(
gradlew
)时有点难看。据我所知,您的用例没有直接的解决方案

如果我没弄错的话,
:builder
项目只是一个用于组织目的的虚拟项目,不包含任何实际的源代码或任何其他要构建的内容。在这种情况下,您可以使用
builder/build.gradle
中的任务依赖项来解决问题:

task build {
    dependsOn ':builder:base:build', ':builder:reporting:build'
}

我发现了三种可能的解决方案:

一,。
gradle-p builder干净构建

2:

三,。添加对builder/build.gradle的修改(适用于gradle 6.3):

然后从根项目目录运行
gradleclean build

感谢您提供此解决方案

感谢您的解释。这就是我希望知道的!把我的两分钱放在你的解释上。对于Gradle 6.3,正确的命令:
build{dependsOn':builder:base:build',“:builder:reporting:build'}
也可以切换目录并运行
Gradle clean build
(不是
gradlew
)是的,但仅当机器上安装了
Gradle
时。如果使用包装器,则通常不提供此功能。如果任务
build
已经存在,则您只能在不创建它的情况下引用它(如在您的示例中),这可能是因为您应用了
java
插件。再次感谢您。你完全正确,我已经在我的机器上安装了
gradle
,并将
java
插件应用到我的项目中:)
task build {
    dependsOn ':builder:base:build', ':builder:reporting:build'
}
cd ./builder
gradle clean build
build {
    dependsOn ':builder:base:build', ':builder:reporting:build'
}