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

aut*_*ter 21 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
Run Code Online (Sandbox Code Playgroud)

我可以强制它运行测试运行干净的测试,尽管这可能被认为在某些情况下的开销.有没有办法强制执行任务,无论Gradle是否认为它是最新的?

Mar*_*rga 32

如果要重新运行所有任务,可以使用命令行参数 --rerun-tasks.然而,这与重新运行所有任务时执行干净基本相同.

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

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

如果要重新运行一个任务并保留所有其他任务,则必须实现一些逻辑:

mytask {

    outputs.upToDateWhen { 
        if (project.hasProperty('rerun')) {
            println "rerun!"
            return false
        } else {
            return true
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

gradle mytask -Prerun

请注意,这也将重新运行所有依赖的任务mytask.

  • 请注意,如果您的任务没有任何已定义的文件输入,Gradle可能会跳过任务,即使这样做! (4认同)

Bra*_*rek 20

在 Gradle v7.6 中,--rerun标志可以告诉单个任务忽略最新检查:

./gradlew theTask --rerun
Run Code Online (Sandbox Code Playgroud)