Следующий фрагмент кода определяет 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.