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


我遇到了一种情况,当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

我可以强迫它运行 测试 通过运行 清洁测试,虽然在某些情况下这可能被视为开销。有没有办法强制执行任务,无论Gradle是否相信它是最新的?


1842
2018-02-11 11:18


起源



答案:


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

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

mytask {
    outputs.upToDateWhen { false }
}

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

mytask {

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

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

gradle mytask -Prerun

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


12
2018-02-12 09:17



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


答案:


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

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

mytask {
    outputs.upToDateWhen { false }
}

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

mytask {

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

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

gradle mytask -Prerun

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


12
2018-02-12 09:17



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