Gradleタスクを強制的に再実行する方法、またはすべてのタスクを最新でない状態にリセットする方法はありますか?
Gradleタスクを強制的に再実行する方法、またはすべてのタスクを最新でない状態にリセットする方法はありますか?
回答:
常に1つのタスクのみを実行する場合outputs
は、タスク内でプロパティを設定できます。
outputs.upToDateWhen { false }
タスクに定義されたファイル入力がない場合、上記のコードを使用している場合でも、Gradleはタスクをスキップする場合があることに注意してください。たとえば、Zipタスクまたはコピータスクでは、タスク定義の構成フェーズで少なくとも1つのファイルを提供する必要があります。
tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
使用できます 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 }
}
}
}