我正在尝试学习Gradle。我偏爱的学习方式是从低层次了解发生了什么。为此,我试图解释有关example 6.1的文档DSL reference:中发生的情况
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
? Project
对象来将taskX
解析为未知方法。但是,对于AFAIK,如果给定紧接在其前面的task
的方法调用,则该方法调用此时在语法上将无效。 如您所见,我对示例语法如何映射到DSL引用指南感到有些困惑,这让我很难真正了解基层的情况。
谢谢!
最佳答案
任务声明语法的task foo
变体的特殊之处在于,它是使用Groovy编译器插件实现的。据我所知,这是唯一使用编译器插件支持特殊语法的情况。