Gradle 任务不会在所有子项目中运行



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

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

当我为/builder子项目运行build任务时,我希望build任务将为所有子项目(对于:builder:base:builder:reporting(执行。

gradle clean :builder:build

但是 gradle 仅对子项目执行build任务:builder. 根据 Gradle 文档build应完成所有子项目的任务。

为什么没有发生?

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

附言我在每个子项目中都有build.gradle,我的settings.gradle看起来像

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

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

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

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

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

1.gradle -p builder clean build

阿拉伯数字:

cd ./builder
gradle clean build

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

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

并从根项目目录运行gradle clean build。 感谢您提供此解决方案卢卡斯·科尔弗回答

最新更新