0

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

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

当我为/builderbuild子项目运行任务时,我希望该任务将为所有子项目(for和)执行。build:builder:base:builder:reporting

gradle clean :builder:build

但 gradlebuild只为 subproject 执行任务:builder。根据Gradle 文档 build任务应该为所有子项目完成。

为什么不发生?

PS我发现该命令gradle -p builder clean build按预期工作。但我真的不明白第一次提到的 gradle 任务有什么问题。

PSS 我build.gradle在每个子项目中都有,我的settings.gradle样子

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

2 回答 2

2

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

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

task build {
    dependsOn ':builder:base:build', ':builder:reporting:build'
}
于 2020-05-20T15:36:59.207 回答
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 回答

于 2020-05-21T09:21:14.817 回答