Gradle - выполнить несколько команд из задачи

У меня есть 2 отдельных приложения (в одном проекте), для которых требуется 2 отдельных сборки (sencha cmd). Мне было предложено создать gradle script, который будет выполнять сборки для обоих приложений.

Я создал задачу, которая создает одно приложение, но у меня возникают проблемы с использованием одной и той же задачи для создания второго приложения.

Это то, что у меня есть до сих пор:

task senchaCmdBuild (type: Exec) {
  workingDir 'src/main/app/MYAPP'
  commandLine 'cmd', 'c', 'sencha app build'
}

и это отлично работает.

Когда я добавлю следующие две строки к следующей задаче:

 workingDir 'src/main/app/MYOTHERAPP'
 commandLine 'cmd', 'c', 'sencha app build'

первая команда игнорируется и выполняется только вторая команда.

Так что я могу выполнить обе команды с одной задачей?

Ответы

Ответ 1

Вы можете использовать второй способ объявления типов задач на 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, чтобы он выполнялся только при потоке выполнения

Ответ 2

Невозможно сконфигурировать (запустить) несколько команд для задачи типа Exec. commandLine это просто сеттер - последний выигрывает. Если вам нужно запустить несколько команд, лучшая идея состоит в том, чтобы реализовать несколько задач, как @RaGe, предложенных в комментарии, или для написания настраиваемой задачи и использования groovy native механизмов - execute.

Ответ 3

Вы также можете использовать 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'
 }
}