2016-02-22 11 views
15
aus

Ich habe 2 separate Apps (in einem Projekt), die 2 separate Builds benötigen (Sencha CMD). Ich wurde gebeten, ein Skript zu erstellen, das die Builds für beide Apps erstellt.Gradle - führe mehrere Befehle von Task

Ich habe eine Aufgabe erstellt, die eine App erstellt, aber habe Probleme mit der gleichen Aufgabe, um die zweite App zu bauen.

Dies ist, was ich bisher:

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

und das funktioniert gut.

Wenn ich die folgenden 2 Zeilen, auf die oben Aufgabe hinzufügen:

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

der erste Befehl ignoriert und nur den zweiten Befehl ausführt.

Also gibt es sowieso ich kann beide Befehle mit einer Aufgabe ausführen?

+1

erstellen zwei 'Exec erstellen 'Aufgaben und führen Sie beide von einer Hauptaufgabe aus. – RaGe

+1

Ich glaube, dass es eine Lösung geben muss, wo Sie '&&' in der Befehlszeile verwenden können, um mehrere Dinge auszuführen. Alternativ könnten Sie auch ein Shell-Skript aufrufen, das beides getan hat. –

Antwort

28

Sie können die zweite Möglichkeit verwenden, um Aufgabentypen auf Gradle zu deklarieren.

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

Sie müssen die exec-Methode in doLast um nur

+1

Wenn Sie dies in einem Plugin tun, müssen Sie 'project.exec' (sowie' project.task') verwenden, um die richtigen DSL-Methoden aufzurufen. – elias

+1

Vielen Dank, ich habe seit Tagen gesucht. Drazul, du bist so super –

+0

Gibt es eine Möglichkeit, nur den zweiten Befehl auszuführen, wenn der erste fehlschlägt? –

3

Es ist unmöglich, mehrere Befehle für die Aufgabe vom Typ Exec zu konfigurieren (auszuführen). commandLine es ist nur ein Setter - der letzte gewinnt. Wenn Sie mehrere Befehle ausführen müssen, ist es am besten, mehrere Tasks zu implementieren, wie @RaGe im Kommentar vorgeschlagen hat, oder eine benutzerdefinierte Aufgabe zu schreiben und die nativen Mechanismen von groovy zu verwenden - execute Methode.

1

Sie können auch gradle Methoden fließen bei der Ausführung ausgeführt werden gestellt stattdessen fiktive Aufgaben

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' 
} 
} 
+0

toll, das macht mich leben (build :)) einfacher! – user3385242

Verwandte Themen