有没有一种方法,我可以强迫一个分级任务再次运行,或重置 所有任务回到非最新状态?
你可以使用 cleanTaskname
cleanTaskname
假设你有
:someproject:sometask1 UP-TO-DATE :someproject:sometask2 UP-TO-DATE :someproject:sometask3 UP-TO-DATE
如果你想强制执行一些任务,你可以这样做
someproject:cleanSometask2
在运行运行所有内容的任务之前。
显然,在年级,每一个任务,了解最新的也了解如何清洁自己。
尝试使用重新构建 Gradle 缓存的 -C rebuild运行构建。
-C rebuild
在 Gradle 的新版本中,使用 --rerun-tasks
--rerun-tasks
If you want just a single task to always run, you can set the outputs property inside of the task.
outputs
outputs.upToDateWhen { false }
请注意,如果您的任务没有任何定义的文件输入,Gradle 可能会跳过任务,即使使用上述代码。例如,在 Zip 或 Copy 任务中,任务定义的 配置阶段至少需要提供一个文件。
我遇到过一个棘手的情况,在任务内部设置 outputs.upToDateWhen { false }或者添加标志 --rerun-tasks都没有帮助,因为每次运行任务的 setOnlyIf都被设置为 false。
setOnlyIf
false
Adding the following to build.gradle forced the execution of myTask:
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
它会迫使梯级重建。