В чем разница между следующими двумя фрагментами кода?
Сначала:
task copyFiles(type: Copy) << {
from "folder/from"
into "dest/folder"
}
Во-вторых:
task copyFiles(type: Copy) {
from "folder/from"
into "dest/folder"
}
В чем разница между следующими двумя фрагментами кода?
Сначала:
task copyFiles(type: Copy) << {
from "folder/from"
into "dest/folder"
}
Во-вторых:
task copyFiles(type: Copy) {
from "folder/from"
into "dest/folder"
}
Короче говоря, первый фрагмент ошибочен, а второй - правильно.
A Gradle build продолжается в три этапа: инициализация, конфигурация и исполнение. Такие методы, как from
и into
, настраивают задачу, поэтому их необходимо вызвать на этапе конфигурации. Однако <<
(который является ярлыком для doLast
) добавляет действие задачи - он инструктирует задачу, что делать, если и когда она будет выполнена. Другими словами, первый фрагмент настраивает задачу на этапе выполнения, а еще хуже, после того, как было выполнено ее основное (копирование) действие. Следовательно, конфигурация не будет иметь никакого эффекта.
Обычно задача имеет либо тип (который уже выполняет действие задачи), либо <<
(для специальной задачи). Существуют законные случаи использования для обоих (выполнение небольшой пользовательской работы после основной работы задачи), но чаще это не так, это ошибка, когда задача настраивается слишком поздно.
Обычно я рекомендую использовать doLast
вместо <<
, потому что он менее критический и облегчает выявление таких ошибок. (Как только вы понимаете концепции, очевидно, что task copyFiles(type: Copy) { doLast { from ... } }
неверно.)
Первый блок кода создает задачу и добавляет к ней действие. Задача состоит из действий, которые являются блоками инструкций, выполняемыми последовательно при вызове задачи
Второй блок создает задачу и настраивает ее. Эти инструкции выполняются на этапе жизненного цикла конфигурации gradle ".
здесь вы найдете четкое объяснение различий
здесь вы можете найти подробное объяснение задач gradle
здесь является справочником gradle о жизненном цикле