Gradle - выполнить несколько команд из задачи
У меня есть 2 отдельных приложения (в одном проекте), которые требуют 2 отдельных сборок (sencha cmd). Меня попросили создать скрипт gradle, который будет делать сборки для обоих приложений.
Я создал задачу, которая создает одно приложение, но у меня возникли проблемы с использованием этой же задачи для создания второго приложения.
Это то, что я до сих пор:
task senchaCmdBuild (type: Exec) {
workingDir 'src/main/app/MYAPP'
commandLine 'cmd', 'c', 'sencha app build'
}
и это работает нормально.
Когда я добавляю следующие 2 строки к вышеупомянутой задаче:
workingDir 'src/main/app/MYOTHERAPP'
commandLine 'cmd', 'c', 'sencha app build'
первая команда игнорируется и выполняется только вторая команда.
Так я могу выполнить обе команды с одной задачей?
3 ответа
Вы можете использовать второй способ объявления типов задач на Gradle.
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'
}
}
}
Вам нужно поместить метод exec в doLast, чтобы он выполнялся только в потоке выполнения
Невозможно настроить (запустить) несколько команд для задачи типа Exec
, commandLine
это просто сеттер - последний выигрывает. Если вам нужно запустить несколько команд, лучше всего реализовать несколько задач, как предложено в комментарии @RaGe, или написать пользовательскую задачу и использовать собственные механизмы groovy - execute
метод.
Вы также можете использовать методы gradle вместо создания фиктивных задач
task senchaBuild() {
doLast {
senchaBuild_steps()
}
}
void senchaBuild_steps() {
exec {
workingDir 'src/main/app/MYAPP'
commandLine 'cmd', 'c', 'sencha app build'
}
exec {
workingDir 'src/main/app/MYOTHERAPP'
commandLine 'cmd', 'c', 'sencha app build'
}
}
Используйте.execute() в блоке doLast
task myTask(group: "my-group") {
doLast {
println "Starting..."
println "echo \"MyEcho1\"".execute().text.trim()
println "echo \"MyEcho2\"".execute().text.trim()
}
}