Сброс свойства UP-TO-DATE задач gradle?

Есть ли способ заставить задачу gradle запускаться снова или reset все задачи вернуться к состоянию не UP-TO-DATE?

Ответ 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 }
    }
  }
}