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

标签 gradle multi-project gradle-task

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

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/

相关文章:

java - Jacoco 离线检测 Gradle 脚本

Gradle:管理多项目构建中的依赖项/插件版本

java - 如何用buck创建多项目?

plugins - Gradle - 什么时候插件比脚本更可取?

android - Android Gradle:在gradle任务或方法中调用buildConfigield

java - 如何在 fork 进程上使用 gradle 任务启动 spring boot 应用程序?

gradle - Gradle 5 是否与 Groovy @Field 注释兼容?

android - .dex文件中方法引用的数量不能超过64k API 17

gradle - 在Gradle中,如何在每次执行JUnit测试类之前设置唯一的系统属性?

android - Gradle复制任务既不复制文件也不给出任何错误