重置gradle任务的UP-TO-DATE属性?

Ste*_*all 99 groovy gradle

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

Ren*_*hke 121

尝试使用-C rebuild重建Gradle的缓存来运行构建.

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


cmc*_*nty 85

如果只想让一个任务始终运行,则可以outputs在任务内部设置属性.

outputs.upToDateWhen { false }
Run Code Online (Sandbox Code Playgroud)

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

  • 这对我没什么用.我将它添加到任务中并获得"UP-TO-DATE".有趣的是,它是一个ZipTask,我删除了目标存档. (14认同)
  • 对于这样的用法来说这是令人难以置信的:`tasks.whenTaskAdded {th​​eTask - > if(theTask.name.startsWith("dex")){theTask.outputs.upToDateWhen {false} theTask.doLast {task - > ...}} }` (5认同)

c_m*_*ker 25

您可以使用 cleanTaskname

让我们说你有

:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE
Run Code Online (Sandbox Code Playgroud)

而你想强制让我们说sometask2再次运行你可以

someproject:cleanSometask2
Run Code Online (Sandbox Code Playgroud)

在运行运行它的任务之前.

显然,在Gradle中,理解UP-TO-DATE的每项任务也都能理解如何清理自己.

  • 不会.如果最新被捕获为没有给定任务的输出文件,则不会重新设置最新版本.也就是说,如果我有一部分构建中断但整体成功,捕获的状态是错误的,我需要清除它. (6认同)

Mat*_*aun 5

我遇到了一个棘手的情况,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 }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)