Следующий фрагмент кода определяет 4 gradle задачи:
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
Но что такое < оператор? Что он делает в groovy?
Следующий фрагмент кода определяет 4 gradle задачи:
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
Но что такое < оператор? Что он делает в groovy?
В основном это оператор leftShift
. Здесь вы можете найти более подробную информацию .
В gradle <<
используется оператор, чтобы добавить действие к конкретной задаче. Задача состоит из нескольких действий, которые выполняются (чтобы они были добавлены) во время выполнения задачи. <<
просто добавляет действие к коллекциям действий задач. Подробнее о задачах и действиях можно найти здесь.
<<
- оператор сдвига слева. В этом случае task "task$counter"
является объявлением объекта Task
, а <<
перегружается как псевдоним doLast
, который добавляет замыкание в список действий, выполняемых при выполнении задачи.
Если вы не укажете <<
, закрытие рассматривается как закрытие конфигурации и будет выполняться по умолчанию во время конфигурации фазы вашего проекта построить жизненный цикл, независимо от того, какой аргумент задается в командной строке.
Пример:
Если вы берете конфигурацию, указанную в вопросе:
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
И запустите gradle task3
, вывод будет:
:task3
I'm task number 3
Поскольку каждое закрытие было определено как действие выполнения, специфичное для задачи. Поскольку task3
был назван задачей выполнения, это было единственное закрытие действия.
Но если вы удалите <<
и выполните конфигурацию следующим образом:
4.times { counter ->
task "task$counter" {
println "I'm task number $counter"
}
}
И запустите gradle task3
, тогда результат будет следующим:
I'm task number 0
I'm task number 1
I'm task number 2
I'm task number 3
:task3 UP-TO-DATE
Это связано с тем, что все блокировки были определены для настройки самих задач, а не выполнялись как действия при выполнении задач. Таким образом, в этом случае Gradle выполнил все блокировки при настройке проекта, тогда, когда пришло время выполнить task3
, никаких действий не было выполнено, поэтому он сообщал задачу как UP-TO-DATE
.