Ответ 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 } }