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"
}
}
}
}
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
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. –