Ich möchte mehrere Gradle-Aufgaben als eine ausführen. Also statt
./gradlew clean build publish
Ich möchte eine benutzerdefinierte Aufgabe haben
./gradlew cleanBuildPublish
das führt clean
build
und publish
in Ordnung.
Wie ist das möglich?
Das funktioniert nicht
task cleanBuildPublish {
dependsOn 'clean'
dependsOn 'build'
dependsOn 'publish'
}
Antworten:
Wenn Sie einige Aufgaben in vordefinierter Reihenfolge ausführen müssen, müssen Sie nicht nur festlegen
dependsOn
, sondern auchmustRunAfter
Eigenschaften für diese Aufgaben festlegen , wie im folgenden Code:dependsOn
definiert keine Reihenfolge der Aufgabenausführung, sondern macht nur eine Aufgabe von einer anderen abhängig, während dies dermustRunAfter
Fall ist.quelle
Cannot invoke method mustRunAfter() on null object
cleanBuildPublish
nachdem alle einzelnen Aufgaben definiert wurden. Gradle-Aufgaben werden anscheinend von oben nach unten gelesen. Das löste mein Problem fürCannot invoke method mustRunAfter() on null object
Sie können auch die aufgerufene Task-Basisklasse verwenden
GradleBuild
Hier, wie Sie das machen können
GradleBuild
quelle
project.tasks.register
Ihre Aufgabe erstellen und das ist alles.Versuchen Sie unten, cleanBuildPublish von anderen Aufgaben abhängig zu machen
build.gradle
Ausgabe
Weitere Informationen finden Sie unter https://docs.gradle.org/current/userguide/more_about_tasks.html#addDependencyUsingTask
quelle
Wenn sich die Veröffentlichungsaufgabe in einem Unterprojekt mit dem Namen subProjectName befindet,
quelle
Mein Ansatz ist
Das funktioniert bei mir.
quelle
Hier ist, wie ich es mit Kotlin-Skripten gemacht habe, wobei sowohl abhängige als auch mustRunAfter verwendet wurden. Hier ist ein Beispiel für die Ausführung von zwei Aufgaben, eine (benutzerdefinierte registrierte "importUnicodeFiles" -Aufgabe), die sich in "diesem" Projekt befindet, und eine (vordefinierte "Ausführen" -Aufgabe), die sich in einem Geschwisterprojekt mit dem Namen ": unicode" befindet:
Die Gradle-Entwickler raten im Allgemeinen von diesem Ansatz ab (sie sagen, dass das Erzwingen von Bestellungen schlecht ist und das Ausführen von Aufgaben aus anderen Projekten schlecht ist) und arbeiten an einer Möglichkeit, Ergebnisse zwischen Projekten zu veröffentlichen. Siehe: https://docs.gradle.org/current/userguide/cross_project_publications.html
quelle
Hier ist, wie ich es mit Kotlin-Skripten gemacht habe, wobei sowohl abhängige als auch mustRunAfter verwendet wurden. Hier ist ein Beispiel für die Ausführung von zwei Aufgaben, eine (benutzerdefinierte registrierte "importUnicodeFiles" -Aufgabe), die sich in "diesem" Projekt befindet, und eine (vordefinierte "Ausführen" -Aufgabe), die sich in einem Geschwisterprojekt mit dem Namen ": unicode" befindet:
quelle
Versuchen Sie,
defaultTasks
build.gradle hinzuzufügen. Zum Beispiel.defaultTasks 'clean', 'build', 'publish'
quelle