В чем разница между этими синтаксисами определения задач в Gradle? - PullRequest
42 голосов
/ 04 мая 2010

А)

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

B)

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

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

1 Ответ

56 голосов
/ 05 мая 2010

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

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 } }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...