Gradle-Aufgabe am Ende des Builds mit einem Multiprojekt-Build
-
21-12-2019 - |
Frage
Ich versuche, meine eigene Aufgabe zu erstellen, die ein Paket aller Artefakte erstellt, die während meines Multiprojekt-Builds generiert wurden.
Was ich derzeit richtig mache, ist nur:
gradle build createPackage
Das ergibt eine Ausgabe wie die folgende:
:test-utility:compileJava UP-TO-DATE
:test-utility:processResources UP-TO-DATE
...
:test-utility:check UP-TO-DATE
:test-utility:build UP-TO-DATE
Creating Package...
Created.
BUILD SUCCESSFUL
Total time: 4.654 secs
Mit dem createPackage
Aufgabe ist:
task createPackage {
println "Creating Package..."
println "Created."
}
Ich würde es jedoch gerne einfach machen, indem ich nur einen Befehl ausführe. Was wäre also der beste Weg, dies zu tun und sicherzustellen, dass die Reihenfolge beibehalten wird?
Am liebsten würde ich anrufen build
innerhalb der createPackage
Aufgabe hinzufügen oder an die anhängen build
Aufgabe mit meiner Aufgabe.
Lösung
Ok, wenn man zwischen den Zeilen liest, gibt es ein paar Dinge zu klären
1) Ihre printlns werden in der Konfigurationsphase ausgeführt, nicht in der Ausführungsphase.Sehen http://www.gradle.org/docs/current/userguide/build_lifecycle.html Für mehr Information.
2) Sie haben keine einzige „Build“-Aufgabe. gradle build
in der Befehlszeile wird die „Build“-Aufgabe für jedes Ihrer Unterprojekte ausgeführt.Ihre Paketaufgabe müsste von allen abhängen.Etwas wie..
apply plugin: 'java'
evaluationDependsOnChildren()
task createPackage(type:Zip) {
dependsOn subprojects*.build
}
3) Sie können mit Gradle deklarativer vorgehen – sagen Sie ihm einfach, was Sie verpacken möchten, und es wird herausfinden, was es zum Ausführen benötigt.Sie können beispielsweise sagen, dass Sie alle JAR-Dateien Ihrer Unterprojekte komprimieren möchten.
apply plugin: 'java'
evaluationDependsOnChildren()
task createPackage(type:Zip) {
from subprojects*.jar
}
Andere Tipps
Es gibt viele Möglichkeiten.Ein Vorschlag ist eine Änderung build
abhängig sein von createPackage
um sicherzustellen, dass Sie einfach anrufen können gradle build
.Dann möchten Sie Ihre Aufgabe erweitern und angeben, was ihre Eingaben sind (wahrscheinlich handelt es sich dabei um Ausgaben einiger anderer Aufgaben wie …). jar
).Gradle fügt diese Aufgaben zur Ausführung hinzu, wenn Sie den Build ausführen, und kann sie basierend auf dem aktuellen Status jeder Aufgabe erneut ausführen.Dies ist im Benutzerhandbuch dokumentiert - http://www.gradle.org/docs/current/userguide/more_about_tasks.html#sec:up_to_date_checks und später in einem Kapitel über benutzerdefinierte Aufgaben.