我在学习Gradle。我喜欢的学习方式是在低层次上理解正在发生的事情。为此,我试图解释发生的事情在文档的example 6.1关于DSL reference:如何解释Gradle DSL
task hello {
doLast {
println 'Hello world!'
}
}
据我所知,这个脚本是在一个Project
的上下文中执行。因此,我可以从Project
documentation看到,有许多重载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能提供一些解释。 – peacepassion
这个问题可能是更详细的。 [gradle任务定义中的常规语法](http://stackoverflow.com/questions/27584463/understanding-the-groovy-syntax-in-a-gradle-task-definition/27584555#27584555) – user3875388
可能的重复[Understanding在gradle这个任务定义的常规语法(https://stackoverflow.com/questions/27584463/understanding-the-groovy-syntax-in-a-gradle-task-definition) – tkruse