有没有一种方法可以强制运行 Gradle 任务,或者将 所有 任务重置为未 UP-TO-DATE 状态?
尝试使用-C rebuild
运行您的构建,以重建Gradle缓存。
在较新版本的Gradle中,请使用--rerun-tasks
选项。
如果你想让一个任务始终运行,你可以在任务内设置outputs
属性。
outputs.upToDateWhen { false }
请注意,如果您的任务没有定义任何文件输入,即使使用上述代码,Gradle也可能跳过该任务。例如,在 Zip 或 Copy 任务中,需要在任务定义的配置阶段提供至少一个文件。你可以使用cleanTaskname
假设你有
:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE
如果你想强制重新运行某个任务(比如sometask2),你可以这样做:
someproject:cleanSometask2
在运行任务之前,请确保运行所有任务。
显然,在gradle中,每个理解UP-TO-DATE的任务也都懂得如何清理自己。
我曾遇到过一个棘手的问题,在任务中设置 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 }
}
}
}
你可以运行:
./gradlew clean
这将强制Gradle重新构建。
./gradlew clean
。 - acmpo6ou
tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
- Martin L.