Gradle:阻止执行在根项目的 allProjects 中定义的任务

Gradle: Prevent execution of tasks defined in allProjects for root project

我有一个像这样的平面多项目配置:

projA
projB
projC
build_scripts

build_scripts 包含 build.gradle

build.gradle 看起来像这样:

allprojects {
    ...
    task gitPull(type: Exec) {
        description 'Pulls git.'
        commandLine "git", "pull"
    }
}
project(':projA') {
...
}
project(':projB') {
...
}
project(':projC') {
...
}

当我从 build_scripts 目录 运行 gradle gitPull 时,我想要 gradle 在 projAprojBprojC 的目录中执行 git pull(其他任何地方)。

但是,由于 gralde 将 build_scripts 视为根项目,因此它也会在那里执行 git pull - 这会失败,因为它不是 git 存储库(或者即使它是, 我不想在构建项目时对其执行 git pull)

一般来说,我不希望 build_scripts 文件夹,即根项目参与任何与构建相关的 activity。 如何从 allProjects 中指定的任务中排除根项目?

来自Gradle turorials

在此示例中,您可以看到 configure 如何从执行任务 hello 中过滤掉项目 tropicalFish

Example 56.8. Adding custom behaviour to some projects (filtered by project name)

   ....

Note: The code for this example can be found at samples/userguide/multiproject/addTropical/water in the ‘-all’ distribution of Gradle.

Settings.gradle

include 'bluewhale', 'krill','tropicalFish' 

build.gradle

allprojects {
    task hello << {task -> println "I'm $task.project.name" }
}
subprojects {
    hello << {println "- I depend on water"}
}
configure(subprojects.findAll {it.name != 'tropicalFish'}) {
    hello << {println '- I love to spend time in the arctic waters.'}
}