Gradle任务并非在所有子项目中都运行

时间:2020-05-20 13:30:56

标签: gradle multi-project gradle-task

我具有以下多模块项目结构。

Root project 'reports-be'
+--- Project ':auth'
+--- Project ':builder'
|    +--- Project ':builder:base'
|    \--- Project ':builder:reporting'
\--- Project ':common'

当我为 / builder 子项目运行build任务时,我希望所有子项目(对于build和{{1 }}。

:builder:base

但是gradle仅对子项目:builder:reporting执行gradle clean :builder:build 任务。 根据{{​​3}} build,所有子项目的任务都应完成。

为什么不发生?

P.S。我发现命令:builder可以正常工作。但是我真的不明白第一次提到的gradle任务有什么问题。

P.S.S。我在每个子项目中都有build,而我的gradle -p builder clean build看起来像

build.gradle

2 个答案:

答案 0 :(得分:1)

:builder:build是项目build中任务:builder的合格任务名称,因此仅将执行此任务(及其依赖项)。所有(子)项目中的执行仅对于不合格的任务名称为build才可能执行。您可以切换到builder目录并从那里运行gradle build,但是,如果您想为同一调用中的所有项目运行clean,则此方法将不起作用,这很丑陋使用包装器(gradlew)时。据我所知,您的用例还没有直接的解决方案。

如果我说对了,:builder项目只是出于组织目的的虚拟项目,它不包含任何实际资源或任何其他可构建的内容。在这种情况下,您可以使用builder/build.gradle中的任务依赖项来解决问题:

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

答案 1 :(得分:0)

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

1。 gradle -p builder clean build

2:

cd ./builder
gradle clean build

3。为 builder / build.gradle 添加修改(适用于Gradle 6.3):

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

然后从根项目目录运行gradle clean build。 感谢您的解决方案Lukas Korfer answer