如何解释摇篮DSL(How to interpret Gradle DSL)

2019-06-28 00:06发布

我努力学习摇篮。 我喜欢的学习风格是处于较低的水平是怎么回事理解。 为此,我试图解释正在发生的事情例如6.1关于文档的DSL参考:

task hello {
    doLast {
        println 'Hello world!'
    }
}

据我所知,这个脚本是在一个的上下文中执行Project 。 因此,我可以从看Project 文档 ,有一些超载的task(...)方法。 望着签名,我需要选择一个具有封闭作为最后一个参数。 而且,由于我们没有传递Map在这里,我假设被呼叫的方法是task(String name, Closure closure)

然而,我与挣扎的部分是如何,在这个脚本中,文字字符串hello被映射为一个String

另一个例子是例如6.7 :

task taskX(dependsOn: 'taskY') << {
    println 'taskX'
}

task taskY << {
    println 'taskY'
}

在这里,我想我们调用的task(Map<String, ?> args, String name)形式的方法。 但,

  1. 此外,如何将文字字符串taskX最终成为一个String
  2. 由于括号不用于构建Map的文字,如何在括号中的部分最终会被Map
  3. 如果我正确地计算出被称为哪一种方法,都没有比DSL文档中的脚本错误的顺序给出的参数?
  4. 使用括号内的语法看起来所有的世界就像一个方法调用。 这可能表明代表团到Project对象,以解决taskX作为一个未知的方法。 但是,据我所知,一个方法调用不会是在给定的方法调用这一点语法上有效的task紧接它。

正如你可以看到我有点困惑,实例语法下来怎么映射到DSL参考指南,这使得它有点棘手,我真正了解发生了什么事在基层。

谢谢!

Answer 1:

task foo中,它的使用Groovy的编译器插件实现的任务声明语法的变化是特殊的。 据我所知,这是其中一个编译器插件用于支持特殊的语法的唯一情况。



文章来源: How to interpret Gradle DSL
标签: gradle