Есть ли способ заставить задачу gradle снова запускаться или сбросить все задачи обратно в состояние НЕ АКТУАЛЬНО ?
Есть ли способ заставить задачу gradle снова запускаться или сбросить все задачи обратно в состояние НЕ АКТУАЛЬНО ?
Ответы:
Попробуйте запустить свою сборку с -C rebuild
восстановлением кеша Gradle.
В более новых версиях Gradle используйте --rerun-tasks
Если вы хотите, чтобы всегда выполнялась только одна задача, вы можете установить outputs
свойство внутри задачи.
outputs.upToDateWhen { false }
Имейте в виду, что если ваша задача не имеет определенных файловых входов, Gradle может пропустить задачу, даже при использовании приведенного выше кода. Например, в задаче Zip или Copy должен быть хотя бы один файл, предоставленный на этапе конфигурации определения задачи.
tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
Ты можешь использовать cleanTaskname
Допустим, у вас есть
:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE
И вы хотите заставить снова запустить sometask2, вы можете
someproject:cleanSometask2
перед запуском задачи, которая запускает все это.
По-видимому, в gradle каждая задача, которая понимает АКТУАЛЬНОСТЬ, также понимает, как очистить себя.
У меня был сложный случай, когда установка outputs.upToDateWhen { false }
внутри задачи или добавление флага --rerun-tasks
не помогали, так как задача setOnlyIf
продолжала устанавливаться false
каждый раз, когда я ее запускал.
Добавление следующего для build.gradle
принудительного выполнения 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 }
}
}
}