web-dev-qa-db-fra.com

Gradle - exécuter plusieurs commandes à partir de la tâche

J'ai 2 applications distinctes (dans un projet) qui nécessitent 2 versions distinctes (sencha cmd). On m'a demandé de créer un script gradle qui fera les builds pour les deux applications.

J'ai créé une tâche qui crée une application, mais j'ai des problèmes à utiliser la même tâche pour créer la 2e application.

Voici ce que j'ai jusqu'à présent:

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

et cela fonctionne bien.

Lorsque j'ajoute les 2 lignes suivantes à la tâche ci-dessus:

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

la première commande est ignorée et seule la deuxième commande s'exécute.

Est-il donc possible d'exécuter les deux commandes avec une seule tâche?

26
stackato

Vous pouvez utiliser la deuxième façon de déclarer des types de tâches sur 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'
    }
  }
}

Vous devez mettre la méthode exec dans doLast afin d'être exécutée uniquement sur le flux d'exécution

57
Drazul

Il est impossible de configurer (exécuter) plusieurs commandes pour la tâche de type Exec. commandLine c'est juste un setter - le dernier gagne. Si vous devez exécuter plusieurs commandes, la meilleure idée est d'implémenter plusieurs tâches comme @RaGe l'a suggéré dans le commentaire ou d'écrire une tâche personnalisée et d'utiliser les mécanismes natifs de groovy - la méthode execute.

7
Opal

Vous pouvez également utiliser méthodes gradle à la place, créez des tâches fictives

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'
 }
}
4
panser

Utilisez .execute () au bloc doLast

task myTask(group: "my-group") {
       doLast {
             println "Starting..."
             println "echo \"MyEcho1\"".execute().text.trim()
             println "echo \"MyEcho2\"".execute().text.trim()
       }
    }
0
NickUnuchek