从构建脚本

时间:2017-08-13 16:54:38

标签: gradle groovy build.gradle

所以我试图将所有gradle任务的列表写入文件。我当然可以使用tasks命令,但我希望每次调用任何其他 gradle命令时将其缓存到文件中。因此,每当我运行./gradlew build时,我希望将可用任务写入文件。

这看起来很简单,我写了下面的任务来试试:

task cacheTasks() {
    doLast {
        allprojects { p ->
            p.tasks*.each { t ->
                println(p.name + ":" + t.name)
            }
        }
    }
}

问题是,我只获得了所有可用任务的子集。当我运行./gradlew tasks --all命令时,会打印更多。当我循环播放时,似乎没有任何内置任务(例如buildcleanhelp)在tasks*列表中,但奇怪的是我< em>可以直接引用它们:

tasks.build { t ->
    println("DEBUG:" + t.name)
}

看起来很简单,但我一直在寻找解决方案。我甚至尝试查看gradle源代码,看看tasks任务是如何工作的,但是我无法找到任何关于为什么它不起作用的线索。

2 个答案:

答案 0 :(得分:1)

我非常怀疑在容器中有一个名为build的任务类。

这是我在调试任务时得到的结果:

tasks

我不是说gradle build没有运行,但它可能是其他形式的org.gradle.api.tasks.GradleBuild实例。 (我不太确定,因为gradle源代码对我来说很难编译和运行)。

使用时

tasks.build { t ->
    println("DEBUG:" + t.name)
}

您实际上是致电org.gradle.api.tasks.TaskContainer#create(java.util.Map<java.lang.String,?>, groovy.lang.Closure)并创建名为build的新任务。

答案 1 :(得分:1)

rootProject.getAllTasks(true)看起来正在检索的任务多于rootProject.tasks