Я пытаюсь изучить Gradle. Я предпочитаю стиль обучения, чтобы понять на низком уровне, что происходит. С этой целью я пытаюсь интерпретировать то, что происходит в примере 6.1 документации относительно справки по DSL:
task hello {
doLast {
println 'Hello world!'
}
}
Я понимаю, что этот скрипт выполняется в контексте файла Project
. Итак, из Project
документации я вижу, что существует ряд перегруженных task(...)
методов. Глядя на подписи, мне нужно выбрать ту, у которой есть замыкание в качестве последнего аргумента. И поскольку мы не передаем здесь Map
, я предполагаю, что вызывается метод 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
, как часть в круглых скобках оказываетсяMap
? - Если я правильно понял, какой метод вызывается, не являются ли аргументы приведенными в сценарии в неправильном порядке по сравнению с документацией по DSL?
- Синтаксис с использованием круглых скобок во всем мире выглядит как вызов метода. Что может указывать на делегирование объекту
Project
разрешенияtaskX
как неизвестного метода. Но, насколько мне известно, вызов метода не будет синтаксически допустимым в этот момент, учитывая вызов методаtask
, непосредственно предшествующий ему.
Как видите, я немного запутался в том, как синтаксис примера соотносится со справочным руководством по DSL, из-за чего мне немного сложно понять, что происходит на низовом уровне.
Спасибо!