所以我试图将所有gradle任务的列表写入文件。我当然可以使用tasks
命令,但我希望每次调用任何其他 gradle命令时将其缓存到文件中。因此,每当我运行./gradlew build
时,我希望将可用任务写入文件。
这看起来很简单,我写了下面的任务来试试:
task cacheTasks() {
doLast {
allprojects { p ->
p.tasks*.each { t ->
println(p.name + ":" + t.name)
}
}
}
}
问题是,我只获得了所有可用任务的子集。当我运行./gradlew tasks --all
命令时,会打印更多。当我循环播放时,似乎没有任何内置任务(例如build
,clean
或help
)在tasks*
列表中,但奇怪的是我< em>可以直接引用它们:
tasks.build { t ->
println("DEBUG:" + t.name)
}
看起来很简单,但我一直在寻找解决方案。我甚至尝试查看gradle源代码,看看tasks
任务是如何工作的,但是我无法找到任何关于为什么它不起作用的线索。
答案 0 :(得分:1)
我非常怀疑在容器中有一个名为build
的任务类。
这是我在调试任务时得到的结果:
我不是说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
。