【问题标题】:Resetting the UP-TO-DATE property of gradle tasks?重置 gradle 任务的 UP-TO-DATE 属性?
【发布时间】:2011-11-09 12:46:05
【问题描述】:

有没有一种方法可以强制 gradle 任务再次运行,或将 所有 任务重置为 not UP-TO-DATE 状态?

【问题讨论】:

    标签: groovy gradle


    【解决方案1】:

    您可以使用cleanTaskname

    假设你有

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

    如果你想强制让我们说 sometask2 再次运行,你可以

    someproject:cleanSometask2
    

    在你运行运行它的任务之前。

    显然,在 gradle 中,每一个理解 UP-TO-DATE 的任务也理解如何自我清理。

    【讨论】:

    • 'gradle clean' 将清理您所在项目的所有内容。它基本上会删除默认情况下为“/build”的主输出文件夹。这是你要找的吗?
    • 没有。如果最新的被捕获为给定任务的没有输出文件,则不会重新设置为最新的。也就是说,如果我有部分构建中断但总体成功,则捕获的状态是错误的,我需要清除它。
    • 通常,删除 $buildDir 中所有内容的“清理”任务在构建脚本中可用,因为它是由基本插件引入的。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      outputs.upToDateWhen { false }
      

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

      【讨论】:

      • 这对我没有任何作用。我将它添加到任务中并获得“最新”。有趣的是,它是一个 ZipTask,我删除了目标存档。
      • 这样的用法简直不可思议:tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
      • 更新了任务无法运行时的答案。
      • 请注意,现在启用 gradle 构建的缓存时,这不会导致任务再次运行,但它的输出只会从缓存中恢复。
      【解决方案4】:

      我遇到了一个棘手的情况,即在任务中设置 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 }
          }
        }
      }
      

      【讨论】:

        【解决方案5】:

        你可以运行:

        ./gradlew cleanBuildCache
        ./gradlew clean
        

        它将强制 gradle 重建。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-12
          • 1970-01-01
          相关资源
          最近更新 更多