2017-01-27 3 views
0

Gradle 2,14 ich meine benutzerdefinierte Aufgabe "run" schreibenGradle, was ist eine Reihenfolge der Ausführung in einer Aufgabe?

task run() { 
    def allVariantList = []; 
    android.applicationVariants.all { variant -> 
     allVariantList.add(variant.getName()) 
     println "Current allVariantList = " + allVariantList 
    } 
    println "Result allVariantList = " + allVariantList 
} 

meine Aufgabe starten: gradlew Lauf

Ergebnis:

Ergebnis allVariantList = []

Aktuelle allVariantList = [prod_no_check]

Aktuelle allVariantList = [prod_no_check, prod]

Aktuelle allVariantList = [prod_no_check, prod, Stufe]

Aktuelle allVariantList = [prod_no_check, prod, Bühne, dev]

Aktuelle allVariantList = [prod_no_check, prod, Bühne, Entwickler, release]

Aktuelle allVariantList = [prod_no_check, prod, Bühne, Entwickler, Release, dev_no_check]

Fragen:

  1. Warum println "allVariantList Ergebnis =" + allVariantList Lauf vor println "Current allVariantList =" + allVariantList

  2. ich println müssen "Ergebnis allVariantList =" + allVariantList NACH ausführen println "Aktuelle allVariantList =" + allVariantList. Wie kann ich das machen?

+0

Haben Sie in Build-Lebenszyklus untersucht? https://docs.gradle.org/current/userguide/build_lifecycle.html – mumair

Antwort

0

Ich denke, das Problem ist, dass Sie Ihre Aufgabe in der Zeit konfiguriert ist (Sie bei der Konfiguration all deine Sachen zu tun, nicht der Ausführungszeit wird die applicationVariants noch nicht von der Android-Plugin konfiguriert. applicationVariants.all läuft auf allen Varianten, die bereits hinzugefügt wurden, und auch alle Varianten, die in der Zukunft hinzugefügt werden, sobald sie hinzugefügt werden

Ihre Ausgabe würde vorschlagen, dass zur Konfigurationszeit noch keine Varianten eingerichtet sind, daher ist Ihr Ergebnisdruck leer und der andere kommen später, wenn die Varianten erstellt werden ..

Wie Sie alles tun n Sie tun zur Konfigurationszeit, es wird auch immer gemacht, auch wenn Sie Ihre Aufgabe nicht ausführen. Wenn Sie gradlew help oder etwas anderes aufrufen, erhalten Sie die gleiche Ausgabe.

Also entweder alle Ihre Code in der Ausführungsphase (wickeln Sie es in einem doLast { } Schließung), oder zumindest das Ergebnis Drucken in der Ausführungsphase. Wenn Sie Ihre Daten vor der Ausführungsphase benötigen und unabhängig davon, ob Ihre Aufgabe tatsächlich ausgeführt wird oder nicht, können Sie zumindest Ihr Ergebnisdrucken in eine afterEvaluate { }-Sperre umbrechen, die nach der Auswertung des Projekts, aber noch in der Konfigurationsphase ausgeführt wird .

+0

@Alexei würdest du bitte lesen und gehorchen http://stackoverflow.com/help/someone-answers :-) – Vampire

0

OK, danke an alle.Das ist Arbeit:

task run() { 
    description "Install and run app on device/emulator" 
    def allVariantList = []; 
    android.applicationVariants.all { variant -> 
    allVariantList.add(variant.getName()) 
    println "Current allVariantList = " + allVariantList 
    } 
    doLast { 
    println "Result allVariantList = " + allVariantList 
    } 
} 

Hier ist die Erklärung. https://docs.gradle.org/current/userguide/build_lifecycle.html

Beispiel 22.1. Einzelprojekt Build

Verwandte Themen