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

时间:2018-08-17 23:14:42

标签: gradle build task multi-project

我有一个多项目Gradle构建,并且我自定义了“运行”任务以在根项目中做一些不同的事情。 但是,我不希望它像现在一样在完成后调用每个子项目的“运行”任务。但是,此行为仅应针对此任务,我希望所有其他任务都像默认情况一样以递归方式执行,但不希望运行任务。我也不能全局禁用每个子项目的运行任务,因为当单独执行子项目时,它确实在每个子项目中都有用途。

1 个答案:

答案 0 :(得分:4)

在根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(即子项目任务)将被禁用。

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子项目中的abc任务的示例输出:

$ gradle -q :abc:run 
TRACER executing run for path :abc
相关问题