当 运行 另一个任务时跳过一个任务

Skip a task when running another task

我向我的 gradle 项目添加了一个任务:

task deploy() {
    dependsOn "build"
    // excludeTask "test"  <-- something like this

    doFirst {
       // ...
    }
}

现在 build 任务总是在 deploy 任务之前运行。这很好,因为构建任务包含许多步骤。现在我想明确禁用其中一项包含的任务。

通常我使用

从命令行禁用它
gradle deploy -x test

如何以编程方式排除 test 任务?

您需要配置任务图而不是配置 deploy 任务本身。这是您需要的代码:

gradle.taskGraph.whenReady { graph ->
    if (graph.hasTask(deploy)) {
        test.enabled = false
    }
}

警告:这将跳过 test 任务定义的操作,它不会跳过 test 依赖的任务。因此,这与在命令行

上传递 -x test 的行为不同

我不知道你的部署任务是做什么的,但它可能不应该依赖于 'build' 任务。 'build' 任务是一个非常粗粒度的生命周期任务,其中包含大量您可能不想要的东西。

相反,它应该正确定义其输入(可能是您要部署的工件),然后 Gradle 将仅 运行 构建这些输入的必要任务。然后你不再需要任何排除。