Force Gradle即使是UP-TO-DATE也可以运行任务

时间:2017-02-11 11:18:47

标签: gradle

我遇到了一种情况,当Gradle的所有内容都处于最新状态时,尽管我仍然喜欢为我运行任务。显然它没有:

gradle test
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE

BUILD SUCCESSFUL

Total time: 0.833 secs

我可以通过运行 clean test 强制它运行测试,尽管在​​某些情况下这可能会被视为开销。有没有办法强制执行任务,无论Gradle是否相信它的最新状态?

1 个答案:

答案 0 :(得分:26)

如果您想重新运行所有任务,可以使用command line parameter --rerun-tasks。然而,这与重新运行所有任务时的干净基本相同。

如果您想每次都运行一个任务,那么您可以指定它永远不会是最新的:

mytask {
    outputs.upToDateWhen { false }
}

如果你想重新运行一个任务并离开所有其他任务,你必须实现一些逻辑:

mytask {

    outputs.upToDateWhen { 
        if (project.hasProperty('rerun')) {
            println "rerun!"
            return false
        } else {
            return true
        }
    }
}

然后您可以使用以下命令强制重新运行任务:

gradle mytask -Prerun

请注意,这也将重新运行依赖于mytask

的所有任务