Я пытаюсь изучить 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, из-за чего мне немного сложно понять, что происходит на низовом уровне.
Спасибо!