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()
       }
    }
Другие вопросы по тегам