Answers:
如果只希望单个任务始终运行,则可以outputs
在任务内部设置属性。
outputs.upToDateWhen { false }
请注意,如果您的任务没有任何定义的文件输入,即使使用上述代码,Gradle也会跳过该任务。例如,在Zip或Copy任务中,在任务定义的配置阶段需要至少提供一个文件。
tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
您可以使用 cleanTaskname
假设您有
:someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE
而且您想强制让sometask2重新运行,您可以
someproject:cleanSometask2
在运行运行所有任务的任务之前。
显然,每项了解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 }
}
}
}