开发者

Resetting the UP-TO-DATE property of gradle tasks?

Is there a way I ca开发者_StackOverflow中文版n force a gradle task to run again, or reset all tasks back to the not UP-TO-DATE state?


Try to run your build with -C rebuild that rebuilds Gradle's cache.

In newer versions of Gradle, use --rerun-tasks


If you want just a single task to always run, you can set the outputs property inside of the task.

outputs.upToDateWhen { false }

Please be aware that if your task does not have any defined file inputs, Gradle may skip the task, even when using the above code. For example, in a Zip or Copy task there needs to be at least one file provided in the configuration phase of the task definition.


You can use cleanTaskname

Let's say you have

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

And you want to force let's say sometask2 to run again you can

someproject:cleanSometask2

before you run the task that runs it all.

Apparently in gradle, every task that understands UP-TO-DATE also understand how to clean itself.


I had a tough case where setting outputs.upToDateWhen { false } inside the task or adding the flag --rerun-tasks didn't help since the task's setOnlyIf kept being set to false each time I ran it.

Adding the following to build.gradle forced the execution of 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 }
    }
  }
}


You can run:

./gradlew clean

It will force the gradle to rebuild.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜