Я столкнулся с некоторым фрагментом:
task senchaCmdBuild {
doLast {
exec {
workingDir 'src/main/app/MYAPP'
commandLine 'cmd', 'c', 'sencha app build'
}
exec {
workingDir 'src/main/app/MYOTHERAPP'
commandLine 'cmd', 'c', 'sencha app build'
}
}
}
Это какой-то альтернативный синтаксис для типизированной задачи
task someTypedTask(type: Exec) {
commandLine 'ls'
}
Почему он работает без объявления типа? У нас есть какие-то документы по этому поводу?
exec
, который вы используете в doLast, определяется в интерфейсе Проект. В документации указано:
ExecResult exec(Action action) Executes an external command.
The given action configures a ExecSpec, which is used to launch the process.
This method blocks until the process terminates, with its result being returned.
Это просто метод, определенный экземпляром Project
. Он выполняет команду, указанную в закрытии напрямую, поэтому его можно использовать для выполнения команды на этапе настройки. В данном примере он используется для выполнения двух команд в одной задаче (на этапе выполнения через doLast
), что ИМХО следует считать плохой практикой.
Существуют и другие методы, которые выполняются напрямую и разделяют закрытие конфигурации с типами задач, а именно copy
, delete
и javaexec
.