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


回答:


133

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

Gradleの新しいバージョンでは、 --rerun-tasks


89

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

outputs.upToDateWhen { false }

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


14
これは私には何もしません。タスクに追加して「最新」を取得しました。面白いのは、それがZipTaskであり、宛先アーカイブを削除したことです。
maaartinus 2014

5
これは、このような使用のため信じられないほどである:tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
マーティンL.

タスクが実行されない場合の回答を更新しました。
cmcginty 2016

現在、gradleビルドのキャッシュが有効になっていると、タスクが再度実行されることはありませんが、その出力はキャッシュから復元されることに注意してください。
スティーブンフリードリヒ

25

使用できます cleanTaskname

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

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

そして、あなたが強制したいとしましょうsometask2をもう一度実行するとしましょう

someproject:cleanSometask2

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

どうやらGradleのように、UP-TO-DATEを理解するすべてのタスクは、自分自身をクリーンアップする方法も理解しています。


1
'gradle clean'は、現在のプロジェクトのすべてをクリーンアップします。基本的には、メインの出力フォルダー(デフォルトでは '/ build')を削除します。これはあなたが探していたものですか?
c_maker

6
いいえ。最新の状態が特定のタスクの出力ファイルとしてキャプチャされなかった場合、最新の状態に再設定されることはありません。つまり、ビルドブレークの一部があったが全体的に成功した場合、キャプチャされた状態は間違っているため、それをクリアする必要があります。
Stefan Kendall、

1
通常、$ buildDirのすべてを削除する「クリーン」タスクは、ベースプラグインによって導入されるため、ビルドスクリプトで使用できます。
Rene Groeschke 2012年

5

タスクが次のように設定され続けているため、タスク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 }
    }
  }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.