Есть ли способ заставить задачу gradle запускаться снова или reset все задачи вернуться к состоянию не UP-TO-DATE?
Сброс свойства UP-TO-DATE задач gradle?
Ответ 1
Попробуйте запустить сборку с помощью -C rebuild
, которая перестраивает кеш Gradle.
В новых версиях Gradle используйте --rerun-tasks
Ответ 2
Если вы хотите, чтобы только одна задача всегда выполнялась, вы можете установить свойство outputs
внутри задачи.
outputs.upToDateWhen { false }
Помните, что если ваша задача не имеет определенных файлов, Gradle может пропустить задачу даже при использовании вышеуказанного кода. Например, в задаче Zip или Copy должен быть хотя бы один файл, указанный в фазе конфигурации определения задачи.
Ответ 3
Вы можете использовать cleanTaskname
Скажем, у вас есть
:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE
И вы хотите заставить let say sometask2 снова запуститься, вы можете
someproject:cleanSometask2
перед запуском задачи, которая запускает все это.
По-видимому, в gradle каждая задача, которая понимает UP-TO-DATE, также понимает, как очистить себя.
Ответ 4
У меня был трудный случай, когда установка 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 }
}
}
}