Это идиоматия c groovy «сокращение».
Строка
apply(plugin: 'application')
может быть переписана как:
apply( [ plugin: 'application' ] )
и означает, что метод apply()
вызывается с литералом Groovy Map. Литерал карты заменяет java:
Map map = new HashMap();
map.put( "plugin", "application" );
Если метод в качестве последнего аргумента принимает карту, квадратные скобки можно опустить.
Строку также можно переписать как:
apply plugin:'application'
без скобок.
ОБНОВЛЕНИЕ:
2-й вопрос:
да, может (если компилируется). Выглядит уродливо, но действителен.
В Groovy, если последний аргумент метода является закрытием, его можно записать как
copyDeps( map ){ }
или
copyDeps map, {}
или (подробнее javai sh)
copyDeps( map, {} )
UPDATE 2:
tasks.create('copyDeps', Copy, {})
и task copyDeps(type: Copy) {}
на этот раз также взаимозаменяемы в Gradle согласно ref-do c .
tasks.create()
- это простой вызов метода для свойства класса, тогда как task copyDeps()
представляет другую Groovy возможность: построители DSL -> здесь используется построитель Gradle DSL.