Czy istnieje sposób, aby wymusić ponowne uruchomienie zadania oceny lub zresetować wszystkie zadania do stanu, w którym nie są aktualne ?
Czy istnieje sposób, aby wymusić ponowne uruchomienie zadania oceny lub zresetować wszystkie zadania do stanu, w którym nie są aktualne ?
Odpowiedzi:
Spróbuj uruchomić kompilację z -C rebuild
tym, że odbudowuje pamięć podręczną Gradle'a.
W nowszych wersjach Gradle użyj --rerun-tasks
Jeśli chcesz, aby zawsze było uruchamiane tylko jedno zadanie, możesz ustawić outputs
właściwość wewnątrz zadania.
outputs.upToDateWhen { false }
Należy pamiętać, że jeśli twoje zadanie nie ma żadnych zdefiniowanych plików wejściowych, Gradle może je pominąć, nawet przy użyciu powyższego kodu. Na przykład w zadaniu Zip lub Copy musi istnieć co najmniej jeden plik dostarczony w fazie konfiguracji definicji zadania.
tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
Możesz użyć cleanTaskname
Powiedzmy, że masz
:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE
I chcesz zmusić, powiedzmy, zadanie2 do ponownego uruchomienia, możesz
someproject:cleanSometask2
przed uruchomieniem zadania, które to wszystko uruchamia.
Najwyraźniej w gradle każde zadanie, które rozumie AKTUALNE, również rozumie, jak się oczyścić.
Miałem trudny przypadek, w którym ustawienie outputs.upToDateWhen { false }
wewnątrz zadania lub dodanie flagi --rerun-tasks
nie pomogło, ponieważ zadanie setOnlyIf
było ustawiane za false
każdym razem, gdy je uruchomiłem.
Dodanie następujących elementów build.gradle
wymuszających wykonanie 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 }
}
}
}