gradle: unsortierte dependsOn Aufgaben, wie behandeln?
Habe ich drei Stufen auf meiner Installations-routine:
1) download
2) entpacken
3) konfigurieren Sie
downloads, verwenden ant.bekommen und ant.die Prüfsumme, also Baue ich meine eigene Klasse DownloadTask, und dann in der build:
task download (type: DownloadTask) {
url = url
checksumAlgorithm = 'MD5'
destFile = zipFile
}
so kam ich mit 4 Aufgaben:
task download {...}
task unzip {...}
task configure {..}
task install(dependsOn: [download, unzip, configure]) {}
Aber ich habe bemerkt, dass dependsOn nicht respektieren, die Sortierreihenfolge, http://issues.gradle.org/browse/GRADLE-427
Also.. wie ist hier die Problemumgehung?
Kann ich nicht verschieben, nur diese Aufgaben als Methoden, weil es herunterladen verwendet meine Klasse DownloadTask. Ich kann mich bewegen alle Methoden (auch DownloadTask), aber nicht, scheint hier die beste Lösung.
Dank
- Ich bin wahrscheinlich falsch (daher die Bemerkung), konnte aber nicht
configure
dependOn dieunzip
Aufgabe, und dieunzip
Aufgabe dependOndownload
. Danninstall
könnte allein aufconfigure
? - es ist eine gute Lösung, aber das problem ist komplexer als dieses Beispiel (ich arbeite in einer multi-Projekt-Umgebung, so brauche ich, um die Wiederverwendung von einigen dieser Aufgabe, zum Beispiel)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, Sie können auch rufen Sie Ihren Abhängigkeiten von hand, wenn dies keine Hilfe für Sie:
Ich glaube nicht, dass dies der wirkliche Gradle Idee, aber für meine multi-Projekt erstellen dies klappte auch ganz gut.
Grüße,
Jan
Als tim erwähnt, man konnte konfigurieren Sie Ihren build zu haben, diese Abhängigkeiten. Was meinst du mit "wiederverwenden" die Aufgaben? Sie können autowiring hier anstelle der dependsOn Eigenschaft.
Autowire bedeutet, dass Sie deklarieren Sie die Ausgabe von Aufgabe download als input für den unzip-task und so weiter. In deinem Beispiel oben die url der Eingabe Ihrer Download-Aufgabe und die destFile ist der Ausgang. Dieser Ansatz vereinfacht die Wiederverwendung jeder Aufgabe und macht die explizite Bestellung unnötig. In Kapitel 14.8 das gradle Einsteiger-Kapitel finden Sie eine kurze Einführung in diese Art von autowiring (http://www.gradle.org/current/docs/userguide/more_about_tasks.html#N10D4D). Haben Sie einen Blick auf die Javadoc über TaskInputs und TaskOutputs (genannt werden in diesem Kapitel) zu.
Grüße,
René