了解gradle任务定义中的groovy语法

我是Gradle和Groovy的新手,在定义gradle任务时,试图了解常规级别发生的事情。

task hello { println "configuring task hello" doLast { println "hello there" } } 

从阅读“Gradle In Action”一书,我知道task hello {}实际上是对groovy Project接口的task()方法的调用。 在页77上它显示在Project接口上有4个称为任务的方法

 task(args: Map<String,?>, name:String) task(args: Map<String,?>, name:String, c:Closure) task(name: String) task(name: String, c:Closure) 

我明白{}是封闭体。

我不明白的是,groovy是如何根据https://stackoverflow.com/a/25592665/438319解释hellotask hello { }有一个groovy编译器插件,将task hello { }转换为task('hello', { })

我的问题:

  • 我在哪里可以find有关进行转换的Gradle Groovy编译器插件的信息?

  • Gradle脚本是Groovy程序在技术上是不正确的,因为Gradle以某种方式扩展了Groovy编程语言?

  • 有没有办法让gradle命令打印出编译器插件运行后生成的基本groovy代码?

Gradle使用AST Transformations来扩展Groovy语法。 您提到的任务定义语法只是Gradle应用的转换之一。 你可以在这里find这个转换的实现。 回答你的具体问题:

  • Gradle所应用的单个转换并不是我所知道的任何地方。 然而,你可以在上面的链接的相同包中查看其他类。

  • Gradle脚本支持一组超级Groovy语法。 任何有效的Groovy在Gradle脚本中也是有效的,然而,Gradle脚本不一定(并且通常不是)有效的“默认”Groovy。

  • 没有办法获得等效的Groovy代码的输出,因为它是在内存中操作的实际的抽象语法树。