2013-04-17 4 views
10

Ich bin neu bei Gradle Build Tool und jetzt lese ich das Benutzerhandbuch, kann aber den Unterschied zwischen Evaluierungs- und Ausführungsphasen nicht vollständig verstehen.Unterschied zwischen Gradle's Bewertung und Ausführung

In der Konfigurationsphase Projektobjekte konfiguriert sind und DAG erstellt wird, aber wir haben nachEvaluate, was ist hier zu bewerten? Auswertung der Aufgabenabhängigkeiten oder was?

Antwort

11

Wie Sie in der Dokumentation gesehen haben, gibt es drei Phasen: Initialisierung, Konfiguration und Ausführung. Jeder Schritt wird vom Root-Projekt bis zu Teilprojekten für Multiprojekt-Builds durchlaufen. Das afterEvaluate-Objekt ist in der Root-Gradle-Datei eines Multiprojekt-Builds nützlich, wenn Sie bestimmte Elemente basierend auf der Konfiguration in Teilprojekten konfigurieren möchten.

Angenommen, Sie möchten eine Aufgabe für alle Unterprojekte hinzufügen, für die ein bestimmtes Plugin definiert wurde. Wenn Sie Ihr Root-Projekt hinzu:

subprojects {subProject -> 
    if (subProject.plugins.hasPlugin('myplugin')){ 
    subProject.task('newTask')<<{ 
     println "This is a new task" 
    } 
    } 
} 

Diese Aufgabe wird es nie, da die Wurzel hinzugefügt Projekt vor den Teilprojekten konfiguriert ist. Hinzufügen von afterEvaluate löst dies für Sie:

subprojects {subProject -> 
    afterEvaluate{ 
    if (subProject.plugins.hasPlugin('myplugin')){ 
     subProject.task('newTask')<<{ 
     println "This is a new task" 
     } 
    } 
    } 
} 
+0

So ** ** afterEvaluate können einige Elemente konfigurieren, nachdem der Rest Konfiguration durchgeführt wurde? So etwas wie doLast, aber nicht für alleinige Aufgaben, ** afterEvaluate ** setze seine Konfiguration nach anderer Konfiguration und vor der Ausführung. Also wird die Auswertung nach dem Ende der Konfiguration und vor der Ausführung ausgeführt? Habe ich recht? – Xelian

+8

Ja, Sie haben Recht. Neben 'project.afterEvaluate', das nach der Konfiguration eines bestimmten Projekts ausgeführt wird, gibt es auch einen' glassle.projectsEvaluated'-Hook, der ausgeführt wird, nachdem alle Projekte konfiguriert wurden. –

Verwandte Themen