关于groovy:重置gradle任务的UP-TO-DATE属性?

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

有没有办法强制gradle任务再次运行,或将所有任务重置为非UP-TO-DATE状态?


尝试使用-C rebuild运行构建,以重新构建Gradle \\的缓存。

在较新版本的Gradle中,使用--rerun-tasks


如果只希望始终运行一个任务,则可以在任务内部设置outputs属性。

1
outputs.upToDateWhen { false }

请注意,如果您的任务没有任何定义的文件输入,则即使使用上述代码,Gradle也会跳过该任务。例如,在Zip或Copy任务中,在任务定义的配置阶段需要至少提供一个文件。


您可以使用cleanTaskname

假设您有

1
2
3
:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE

您想强制让sometask2重新运行,您可以

1
someproject:cleanSometask2

在运行将全部运行的任务之前。

很显然,每项了解UP-TO-DATE的任务也都了解如何进行自我清洁。


我遇到了一个棘手的情况,在任务中设置outputs.upToDateWhen { false }或添加标志--rerun-tasks都没有帮助,因为每次运行任务时,任务的setOnlyIf都会一直设置为false

build.gradle中添加以下内容强制执行myTask

1
2
3
4
5
6
7
8
9
10
11
12
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 }
    }
  }
}