【发布时间】:2012-09-01 19:39:14
【问题描述】:
我正在尝试学习 Gradle。我喜欢的学习方式是在低层次上了解正在发生的事情。为此,我试图解释文档的example 6.1 中与DSL reference: 相关的内容。
task hello {
doLast {
println 'Hello world!'
}
}
我了解此脚本是在 Project 的上下文中执行的。所以我可以从Projectdocumentation 中看到有许多重载的task(...) 方法。查看签名,我需要选择一个具有闭包作为最终参数的签名。由于我们没有在这里传递Map,我假设被调用的方法是task(String name, Closure closure)。
但是,我正在努力解决的问题是,在此脚本中,文字字符串 hello 如何映射到 String。
另一个例子是example 6.7:
task taskX(dependsOn: 'taskY') << {
println 'taskX'
}
task taskY << {
println 'taskY'
}
在这里,我假设我们正在调用该方法的task(Map<String, ?> args, String name) 形式。但是,
- 同样,文字字符串
taskX是如何以String结尾的? - 鉴于括号不用于构造
Map文字,括号中的部分如何最终成为Map? - 如果我正确地确定了正在调用的方法,那么与 DSL 文档相比,脚本中给出的参数顺序是否错误?
- 使用括号的语法查找整个世界就像一个方法调用。这可能表示委托
Project对象以将taskX解析为未知方法。但是,AFAIK,此时方法调用在语法上无效,因为方法调用紧接在其前面的task。
如您所见,我对示例语法如何映射到 DSL 参考指南感到有些困惑,这让我很难真正理解基层发生的事情。
谢谢!
【问题讨论】:
-
我和你有同样的困惑。并且真心希望 gradleware 能提供一些解释。
-
这个问题可能更详细。 groovy syntax in a gradle task definition
标签: gradle