Gradle 禁用特定任务的自动子项目执行
Gradle disable automatic subproject execution for specific task
我有一个多项目 Gradle 构建,我自定义了 "run" 任务以在根项目中做一些不同的事情。
但是,我不希望它像现在这样在完成后调用每个子项目的"run"任务。但是这种行为应该只针对这个任务,我希望所有其他任务都按默认方式递归执行,但 运行 任务不是。我也不能为每个子项目全局禁用 运行 任务,因为它在每个子项目中单独执行时确实有目的。
在根 build.gradle
中,考虑以下内容(完整示例 here):
gradle.taskGraph.whenReady { graph ->
def hasRootRunTask = graph.hasTask(':run')
if (hasRootRunTask) {
graph.getAllTasks().each { task ->
// look for :abc:run, :def:run etc
def subRunTask = (task.path =~ /:.+:run/)
if (subRunTask) {
println "TRACER skipping ${task.path} because ':run' was specified"
task.enabled = false
}
}
}
}
这将检查 :run
的任务图。当它存在时,那么:abc:run
(即子项目任务)将被禁用。
root run
任务的示例输出:
$ gradle -q run
TRACER skipping :abc:run because ':run' was specified
TRACER skipping :def:run because ':run' was specified
TRACER executing run for path :
abc
子项目中 run
任务的示例输出:
$ gradle -q :abc:run
TRACER executing run for path :abc
我有一个多项目 Gradle 构建,我自定义了 "run" 任务以在根项目中做一些不同的事情。 但是,我不希望它像现在这样在完成后调用每个子项目的"run"任务。但是这种行为应该只针对这个任务,我希望所有其他任务都按默认方式递归执行,但 运行 任务不是。我也不能为每个子项目全局禁用 运行 任务,因为它在每个子项目中单独执行时确实有目的。
在根 build.gradle
中,考虑以下内容(完整示例 here):
gradle.taskGraph.whenReady { graph ->
def hasRootRunTask = graph.hasTask(':run')
if (hasRootRunTask) {
graph.getAllTasks().each { task ->
// look for :abc:run, :def:run etc
def subRunTask = (task.path =~ /:.+:run/)
if (subRunTask) {
println "TRACER skipping ${task.path} because ':run' was specified"
task.enabled = false
}
}
}
}
这将检查 :run
的任务图。当它存在时,那么:abc:run
(即子项目任务)将被禁用。
root run
任务的示例输出:
$ gradle -q run
TRACER skipping :abc:run because ':run' was specified
TRACER skipping :def:run because ':run' was specified
TRACER executing run for path :
abc
子项目中 run
任务的示例输出:
$ gradle -q :abc:run
TRACER executing run for path :abc