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

标签 gradle build task multi-project

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

最佳答案

在根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 :
run子项目中abc任务的示例输出本身:
$ gradle -q :abc:run 
TRACER executing run for path :abc

关于gradle - Gradle禁用特定任务的自动子项目执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51903863/

相关文章:

git - 从Bamboo中单独的GIT存储库中提取文件

android - 无法将 android studio 3.0.1 中的 dex 与最新的 gradle 合并

java - gradle 测试文件的常规文件系统路径

java - 如何在gradle中构建具有传递项目依赖关系的项目

windows - 任务调度程序,终止在 Windows 中启动的程序

ssis - 在 SSIS 中为脚本任务设置超时选项

Android Studio Gradle 版本 - 需要 Gradle 版本 2.8

maven deploy + nexus 因请求错误而失败

c++ - 如何(仅!)在 Visual Studio 中使用自己的构建脚本

.net - 结束 System.Threading.Tasks.Task 的正确方法是什么?