Gradleタスクを強制的に再実行する方法、またはallタスクをUP-TO-DATE状態にリセットする方法はありますか?
Gradleのキャッシュを再構築する-C rebuild
でビルドを実行してみてください。
Gradleの新しいバージョンでは、--rerun-tasks
を使用します
1つのタスクのみを常に実行する場合は、タスク内でoutputs
プロパティを設定できます。
outputs.upToDateWhen { false }
タスクに定義されたファイル入力がない場合、Gradleは上記のコードを使用している場合でもタスクをスキップする可能性があることに注意してください。たとえば、Zipまたはコピータスクでは、タスク定義のconfigurationフェーズで少なくとも1つのファイルを提供する必要があります。
cleanTaskname
を使用できます
あなたが持っているとしましょう
:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE
強制的にやり直したい場合は、sometask2をもう一度実行してみましょう。
someproject:cleanSometask2
すべてを実行するタスクを実行する前に。
どうやらgradleでは、UP-TO-DATEを理解しているすべてのタスクは、自分自身をきれいにする方法も理解しています。
タスク内で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 }
}
}
}