web-dev-qa-db-ja.com

gradleタスクのUP-TO-DATEプロパティをリセットしますか?

Gradleタスクを強制的に再実行する方法、またはallタスクをUP-TO-DATE状態にリセットする方法はありますか?

98
Stefan Kendall

Gradleのキャッシュを再構築する-C rebuildでビルドを実行してみてください。

Gradleの新しいバージョンでは、--rerun-tasksを使用します

119
Rene Groeschke

1つのタスクのみを常に実行する場合は、タスク内でoutputsプロパティを設定できます。

outputs.upToDateWhen { false }

タスクに定義されたファイル入力がない場合、Gradleは上記のコードを使用している場合でもタスクをスキップする可能性があることに注意してください。たとえば、Zipまたはコピータスクでは、タスク定義のconfigurationフェーズで少なくとも1つのファイルを提供する必要があります。

81
cmcginty

cleanTasknameを使用できます

あなたが持っているとしましょう

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

強制的にやり直したい場合は、sometask2をもう一度実行してみましょう。

someproject:cleanSometask2

すべてを実行するタスクを実行する前に。

どうやらgradleでは、UP-TO-DATEを理解しているすべてのタスクは、自分自身をきれいにする方法も理解しています。

25
c_maker

タスク内で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 }
    }
  }
}
2
Matthias Braun