Подтвердить что ты не робот

Что оператор << (вдвое меньше) в gradle?

Следующий фрагмент кода определяет 4 gradle задачи:

4.times { counter ->
    task "task$counter" << {
        println "I'm task number $counter"
    }
}

Но что такое < оператор? Что он делает в groovy?

4b9b3361

Ответ 1

В основном это оператор leftShift. Здесь вы можете найти более подробную информацию .

В gradle << используется оператор, чтобы добавить действие к конкретной задаче. Задача состоит из нескольких действий, которые выполняются (чтобы они были добавлены) во время выполнения задачи. << просто добавляет действие к коллекциям действий задач. Подробнее о задачах и действиях можно найти здесь.

Ответ 2

<< - оператор сдвига слева. В этом случае 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.