当 运行 另一个任务时跳过一个任务
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 将仅 运行 构建这些输入的必要任务。然后你不再需要任何排除。
我向我的 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 将仅 运行 构建这些输入的必要任务。然后你不再需要任何排除。