Gibt es eine Möglichkeit, eine Gradle-Aufgabe erneut auszuführen oder alle Aufgaben auf den Status "NICHT AKTUELL" zurückzusetzen ?
Gibt es eine Möglichkeit, eine Gradle-Aufgabe erneut auszuführen oder alle Aufgaben auf den Status "NICHT AKTUELL" zurückzusetzen ?
Antworten:
Versuchen Sie, Ihren Build so auszuführen, -C rebuild
dass Gradles Cache neu erstellt wird.
Verwenden Sie in neueren Versionen von Gradle --rerun-tasks
Wenn immer nur eine einzelne Aufgabe ausgeführt werden soll, können Sie die outputs
Eigenschaft innerhalb der Aufgabe festlegen .
outputs.upToDateWhen { false }
Bitte beachten Sie, dass Gradle die Aufgabe möglicherweise überspringt, wenn für Ihre Aufgabe keine Dateieingaben definiert sind, auch wenn der obige Code verwendet wird. Beispielsweise muss in einer Zip- oder Kopieraufgabe mindestens eine Datei in der Konfigurationsphase der Aufgabendefinition bereitgestellt werden .
tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
Sie können verwenden cleanTaskname
Nehmen wir an, Sie haben
:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE
Und Sie möchten erzwingen, dass sometask2 erneut ausgeführt wird
someproject:cleanSometask2
bevor Sie die Aufgabe ausführen, die alles ausführt.
Anscheinend versteht jede Aufgabe, die UP-TO-DATE versteht, auch, wie man sich selbst reinigt.
Ich hatte einen schwierigen Fall, in dem das Setzen outputs.upToDateWhen { false }
innerhalb der Aufgabe oder das Hinzufügen des Flags --rerun-tasks
nicht geholfen hat, da die Aufgabe jedes Mal, wenn ich sie ausführte setOnlyIf
, auf gesetzt wurde false
.
Fügen Sie Folgendes hinzu, um build.gradle
die Ausführung von zu erzwingen myTask
:
gradle.taskGraph.whenReady { taskGraph ->
def tasks = taskGraph.getAllTasks()
tasks.each {
def taskName = it.getName()
if(taskName == 'myTask') {
println("Found $taskName")
it.setOnlyIf { true }
it.outputs.upToDateWhen { false }
}
}
}