Groovy 是否重置gradle任务的最新属性?

Groovy 是否重置gradle任务的最新属性?,groovy,gradle,Groovy,Gradle,有没有办法强制gradle任务重新运行,或者将所有任务重置为非最新状态?您可以使用cleanstaskname 假设你有 :someproject:sometask1 UP-TO-DATE :someproject:sometask2 UP-TO-DATE :someproject:sometask3 UP-TO-DATE 如果你想强迫我们再运行一次Task2,你可以 someproject:cleanSometask2 在您运行运行所有任务的任务之前 显然,在gradle中,每个了解最新信

有没有办法强制gradle任务重新运行,或者将所有任务重置为非最新状态?

您可以使用
cleanstaskname

假设你有

:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE
如果你想强迫我们再运行一次Task2,你可以

someproject:cleanSometask2
在您运行运行所有任务的任务之前


显然,在gradle中,每个了解最新信息的任务也都知道如何清理自身。

尝试使用重建gradle缓存的
-C rebuild
运行构建


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

如果您只想始终运行单个任务,可以在任务内部设置
outputs
属性

outputs.upToDateWhen { false }

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

我遇到过一个困难的情况,即设置
outputs.uptdatewhen{false}
在任务内部或添加标志
--重新运行任务
没有帮助,因为每次运行任务时,任务的
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 }
    }
  }
}
您可以运行:

/gradlew cleanBuildCache
/gradlew清洁

它将强制gradle重建。

“gradle clean”将清理您所在项目的所有内容。它基本上会删除您的主输出文件夹,默认情况下是“/build”。这就是您正在寻找的吗?不。如果最新的被捕获为给定任务的无输出文件,则不会重新设置为最新的。也就是说,如果我有部分构建中断,但总体上成功了,那么捕获的状态是错误的,我需要清除它。通常,$buildDir中删除所有内容的“清除”任务在构建脚本中可用,因为它是由基本插件引入的。这对我没有任何帮助。我将其添加到任务中,并获得“最新信息”。有趣的是,这是一个ZipTask,我删除了目标存档。这是难以置信的用法:
tasks.whentask添加了{theTask->if(theTask.name.startsWith(“dex”){theTask.outputs.upToDateWhen{false}theTask.doLast{task->}
更新了任务不运行时的情况回答。请注意,现在启用gradle内置缓存不会导致任务再次运行,但其输出将从缓存中恢复。