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

В чем разница между этими синтаксисами определения задачи в gradle?

A)

task build << {  
  description = "Build task."  
  ant.echo('build')  
}

B)

task build {  
  description = "Build task."  
  ant.echo('build')  
}

Я замечаю, что с типом B код внутри задачи, похоже, выполняется при вводе gradle -t - ant изгоняет "сборку" даже при простом перечислении всех доступных доступных задач. Описание также фактически отображается с типом B. Однако с типом A никакой код не выполняется при перечислении доступных задач, и описание не отображается при выполнении gradle -t. Документы, похоже, не вникают в разницу между этими двумя синтаксисами (которые я нашел), только чтобы вы могли определить задачу в любом случае.

4b9b3361

Ответ 1

Первый синтаксис определяет задачу и предоставляет некоторый код, который будет выполняться при выполнении задачи. Второй синтаксис определяет задачу и предоставляет некоторый код для немедленного выполнения задачи. Например:

task build << { println 'this executes when build task is executed' }
task build { println 'this executes when the build script is executed' }

Фактически, первый синтаксис эквивалентен:

task build { doLast { println 'this executes when build task is executed' } }

Итак, в вашем примере выше для синтаксиса A описание не отображается в gradle -t, потому что код, который устанавливает описание, не выполняется до выполнения задачи, чего не происходит при запуске gradle -t.

Для синтаксиса B код, выполняющий ant.echo(), запускается для каждого вызова gradle, включая gradle -t

Чтобы обеспечить как действие для выполнения, так и описание задачи, вы можете выполнить любое из следующих действий:

task build(description: 'some description') << { some code }
task build { description = 'some description'; doLast { some code } }