Resetting the UP-TO-DATE property of gradle tasks?
有没有办法强制gradle任务再次运行,或将所有任务重置为非UP-TO-DATE状态?
尝试使用-C rebuild运行构建,以重新构建Gradle \\的缓存。
在较新版本的Gradle中,使用--rerun-tasks
如果只希望始终运行一个任务,则可以在任务内部设置outputs属性。
1
| outputs. upToDateWhen { false } |
请注意,如果您的任务没有任何定义的文件输入,则即使使用上述代码,Gradle也会跳过该任务。例如,在Zip或Copy任务中,在任务定义的配置阶段需要至少提供一个文件。
-
这对我没有任何帮助。我将其添加到任务中并获得"最新"信息。有趣的是,这是一个ZipTask,我删除了目标存档。
-
对于这样的用法,这是不可思议的:tasks.whenTaskAdded { theTask -> if (theTask.name.startsWith("dex")) { theTask.outputs.upToDateWhen { false } theTask.doLast { task ->... }}}
-
更新了针对无法执行任务的情况的答案。
-
当心,当启用了gradle构建的缓存时,这不会导致任务再次运行,但是其输出只会从缓存中恢复。
您可以使用cleanTaskname
假设您有
1 2 3
| :someproject:sometask1 UP-TO-DATE
:someproject:sometask2 UP-TO-DATE
:someproject:sometask3 UP-TO-DATE |
您想强制让sometask2重新运行,您可以
1
| someproject:cleanSometask2 |
在运行将全部运行的任务之前。
很显然,每项了解UP-TO-DATE的任务也都了解如何进行自我清洁。
- 'gradle clean'将清除您所在项目的所有内容。它基本上删除了默认情况下的主输出文件夹'/ build'。这是您要找的东西吗?
-
否。如果将最新捕获为给定任务的任何输出文件,则不会将其重新设置为最新。也就是说,如果我有部分构建中断但整体上成功了,则捕获的状态是错误的,因此我需要清除它。
-
通常,删除$ buildDir中所有内容的"干净"任务在构建脚本中可用,因为它是由基本插件引入的。
我遇到了一个棘手的情况,在任务中设置outputs.upToDateWhen { false }或添加标志--rerun-tasks都没有帮助,因为每次运行任务时,任务的setOnlyIf都会一直设置为false。
在build.gradle中添加以下内容强制执行myTask:
1 2 3 4 5 6 7 8 9 10 11 12
| 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 }
}
}
} |