Existe uma maneira de forçar uma tarefa do Gradle a ser executada novamente ou redefinir todas as tarefas para o estado não ATUALIZADO?
Existe uma maneira de forçar uma tarefa do Gradle a ser executada novamente ou redefinir todas as tarefas para o estado não ATUALIZADO?
Respostas:
Tente executar sua construção com -C rebuild
o cache do Gradle que reconstrói.
Em versões mais recentes do Gradle, use --rerun-tasks
Se você deseja que apenas uma única tarefa seja sempre executada, você pode definir a outputs
propriedade dentro da tarefa.
outputs.upToDateWhen { false }
Esteja ciente de que, se sua tarefa não tiver nenhuma entrada de arquivo definida, o Gradle pode pular a tarefa, mesmo ao usar o código acima. Por exemplo, em uma tarefa Zip ou Copiar, deve haver pelo menos um arquivo fornecido na fase de configuração da definição da tarefa.
tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
Você pode usar cleanTaskname
Digamos que você tem
:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE
E você quer forçar, digamos, sometask2 a ser executado novamente, você pode
someproject:cleanSometask2
antes de executar a tarefa que executa tudo.
Aparentemente, no gradle, todas as tarefas que entendem ATUALIZAÇÃO também entendem como se limpar.
Tive um caso difícil em que definir outputs.upToDateWhen { false }
dentro da tarefa ou adicionar o sinalizador --rerun-tasks
não ajudava, pois a tarefa setOnlyIf
continuava sendo definida para false
cada vez que eu a executava.
Adicionar o seguinte para build.gradle
forçar a execução de 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 }
}
}
}