Gradle 禁用特定任务的自动子项目执行

Xer*_*rus 1 build task multi-project gradle

我有一个多项目 Gradle 构建,我自定义了“运行”任务以在根项目中做一些不同的事情。但是,我不希望它在完成后调用每个子项目的“运行”任务,就像现在一样。但是这种行为应该只针对这个任务,我希望每个其他任务都按照默认值递归执行,但运行任务不是。我也不能为每个子项目全局禁用运行任务,因为它在每个子项目中单独执行时确实有目的。

Mic*_*ter 5

在 root 中build.gradle,请考虑以下内容(此处为完整示例):

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 Code Online (Sandbox Code Playgroud)

这将检查任务图:run。当它存在时,:abc:run(即子项目任务)将被禁用。

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 :
Run Code Online (Sandbox Code Playgroud)

子项目中run任务的示例输出abc本身:

$ gradle -q :abc:run 
TRACER executing run for path :abc
Run Code Online (Sandbox Code Playgroud)