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

13z8s7eq  于 2023-02-13  发布在  其他
关注(0)|答案(3)|浏览(165)

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

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

    doFirst {
       // ...
    }
}

现在build任务总是在deploy任务之前运行,这很好,因为构建任务包含了许多步骤,现在我想显式禁用其中一个包含的任务。
通常我从命令行禁用它

gradle deploy -x test

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

col17t5w

col17t5w1#

您需要配置任务图而不是配置deploy任务本身。

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

警告:这将跳过test任务定义的操作,但不会跳过test依赖的任务。因此,这与在命令行上传递-x test的行为不同

kdfy810k

kdfy810k2#

我不知道你的部署任务是做什么的,但是它可能不应该依赖于"构建“任务,”构建“任务是一个非常粗粒度的生命周期任务,它包含了大量你可能不想要的东西。
相反,它应该正确定义其输入(可能是您要部署的工件),然后Gradle将只运行构建这些输入所需的任务,这样您就不再需要任何排除。

vltsax25

vltsax253#

我也遇到过类似的问题,下面是当我运行“intTest”并希望IT单独运行时,如何阻止“test”运行:

test {
    onlyIf { !gradle.startParameter.taskNames.contains("intTest") }
}

另一种方法不依赖于显式运行的特定任务:

test {
    onlyIf { !gradle.taskGraph.hasTask(":intTest") || gradle.taskGraph.hasTask(":check") }
}

相关问题