我正在尝试学习 Gradle。我喜欢的学习方式是在低层次上了解正在发生的事情。为此,我试图解释文档的示例 6.1中关于DSL 参考的情况:
task hello {
doLast {
println 'Hello world!'
}
}
我知道这个脚本是在Project
. 所以我可以从Project
文档中看到有很多重载的task(...)
方法。查看签名,我需要选择一个具有闭包作为最终参数的签名。由于我们没有在Map
这里传递 a ,我假设被调用的方法是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)
方法的形式。但,
- 同样,文字字符串如何
taskX
以String
? - 鉴于括号不用于构造
Map
文字,括号中的部分如何最终成为 aMap
? - 如果我正确地找出了正在调用的方法,那么与 DSL 文档相比,脚本中给出的参数顺序是否错误?
- 使用括号的语法像方法调用一样查找整个世界。这可能表明委托给
Project
对象以解析taskX
为未知方法。task
但是,AFAIK,鉴于方法调用紧接在它之前,方法调用此时在语法上无效。
正如您所看到的,对于示例语法如何映射到 DSL 参考指南,我有点困惑,这让我很难真正理解基层发生的事情。
谢谢!