我在學習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