Сброс свойства UP-TO-DATE для задач Gradle? - PullRequest
95 голосов
/ 03 сентября 2011

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

Ответы [ 4 ]

116 голосов
/ 04 сентября 2011

Попробуйте запустить сборку с -C rebuild, который перестраивает кеш Gradle.

В более новых версиях Gradle используйте --rerun-tasks

80 голосов
/ 23 августа 2013

Если вы хотите, чтобы всегда выполнялась только одна задача, вы можете установить свойство outputs внутри задачи.

outputs.upToDateWhen { false }

Имейте в виду, что если ваша задача не имеет каких-либо определенных файловых входов, Gradle может пропустить задачу, даже используя приведенный выше код. Например, в задаче Zip или Copy должен быть указан хотя бы один файл на этапе configuration определения задачи.

25 голосов
/ 03 сентября 2011

Вы можете использовать cleanTaskname

Допустим, у вас есть

:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE

И вы хотите заставить, скажем, sometask2 снова работать, вы можете

someproject:cleanSometask2

перед запуском задачи, которая все это запускает.

По-видимому, в gradle, каждая задача, которая понимает ОБНОВЛЕНИЕ, также понимает, как очистить себя.

2 голосов
/ 17 июля 2016

У меня был сложный случай, когда установка 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 }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...