我如何知道 gradle 中的任务来自哪里?

C D*_*man 6 gradle antlr4

我继承了一个复杂的 gradle 构建系统。它工作得很好,但包含多个插件(java、groovy、antlr、jacoco、jetty 等)。我不知道如何完成某件事,所以我做了一个“./gradlewtasks --all”。事实证明,有一个“生成”任务完成了这一任务(它重新生成了基于 antlr 的代码)。很好,但是花了很长时间,我不知道。

生成的任务从哪里来?我可以使用什么 gradle 命令来找出该任务的来源?有一个自定义的antlr任务有一个“dependsOn”生成“,所以我认为它来自antlr插件,但很难说。

Opa*_*pal 0

目前不可能找到给定插件的所有任务以及为给定任务指定插件。请查看文档- 任务和插件之间没有链接。

您可以尝试以下代码(可能容易出错):

import java.lang.reflect.Modifier

project.plugins.each { p ->
    println "Plugin: ${p.getClass().name} "
    p.getClass().declaredFields.findAll { 
        Modifier.isStatic(it.getModifiers()) && 
        it.name.endsWith('_TASK_NAME') &&
        it.type.simpleName.equals('String')
    }.each {
        println " -> ${it.get(p)}"
    }
    println '\n'
}
Run Code Online (Sandbox Code Playgroud)