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

前端 未结 4 1745
没有蜡笔的小新
没有蜡笔的小新 2020-12-07 17:14

Is there a way I can force a gradle task to run again, or reset all tasks back to the not UP-TO-DATE state?

相关标签:
4条回答
  • 2020-12-07 17:45

    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.

    0 讨论(0)
  • 2020-12-07 17:50

    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.

    0 讨论(0)
  • 2020-12-07 18:02

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

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

    0 讨论(0)
  • 2020-12-07 18:04

    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 }
        }
      }
    }
    
    0 讨论(0)
提交回复
热议问题