2017-02-14 2 views
1

ich ausführen möchten einen Befehl von der Kommandozeile in gradle Aufgabe (. Z drucken Sie alle Dateien in dir):Gradle, Task-Typ: Exec - command nicht funktionieren in onLast

task dir(type: Exec) { 
    def adbCommand = ["dir", "*.*"] 
    commandLine adbCommand 
    standardOutput = new ByteArrayOutputStream() 
    doLast { 
    println ("result = " + standardOutput) 
    } 
} 

Es ist Arbeit. OK. Aber wenn ich es auf onLast Abschnitt arbeitet es nicht:

task dir(type: Exec) { 
    doLast { 
    def adbCommand = ["dir", "*.*"] 
    commandLine adbCommand 
    standardOutput = new ByteArrayOutputStream() 
    println ("result = " + standardOutput) 
    } 
} 

ich Fehler:

AUSFALL: mit einer Ausnahme fehlgeschlagen bauen.

  • Was schief gelaufen ist:

Ausführung für Aufgabe fehlgeschlagen ': App: dir'.

execCommand == null!

+0

Mögliches Duplikat von [Gradle, Befehlszeile 'cmd', '/ c', 'echo doLast!' macht nichts] (http://stackoverflow.com/questions/42055620/gradle-commandline-cmd-c-echo-dolast-does-nothing) – sm4

Antwort

0

Der Grund dafür ist in der Tatsache, dass Aufgabe der Exec sollte während Konfigurationsphase des Build konfiguriert werden, sonst wird Ihre Aufgabe so konfiguriert werden, nicht und scheitern.

In Ihrem ersten Beispiel funktioniert alles aufgrund der Konfiguration in der Konfigurationsphase. Ihr zweites Beispiel versucht, die Aufgabe innerhalb doLast Schließung zu konfigurieren - direkt nach der Aufgabe noch nicht ausgeführt wird.

Wenn Sie wirklich etwas in doLast ausführen müssen, können Sie so etwas wie diese, ohne besondere Aufgabe zu erstellen:

task someTaskName { 
    doLast { 
     exec { 
      commandLine adbCommand 
     } 
    } 
} 

Hier ist exec -Spezifikation verwendet einen Befehl auszuführen, und es ist so konfiguriert und an die ausgeführt gleiche Zeit.

Verwandte Themen