我需要以编程方式清除gradle任务依赖项的UP-TO-DATE属性。我正在一个子项目build.gradle
文件中工作,该文件处理其他子项目的集成并部署它们。我需要能够仅在一个特定任务正在运行时清除该属性。我想确保在开始部署任务之前,我的三个任务(clean
,cleanNodeJs
和npmInstall
)始终重新运行。但是,我不想影响其他任务,因为它可以不重新运行这些事情(特别是因为npmInstall
需要花费非常少的时间来运行)。
我看了this类似的问题,但那里的答案对我不起作用。使用--rerun-tasks
并不足够,因为它依赖于调用者来指定,我需要确保始终为此部署任务重新运行我所需的任务。为这三个任务设置outputs.upToDateWhen { false }
并不是我要找的东西,因为这样就要求那些任务总是重新运行,即使是其他不需要它们的任务(除非有& #39;是一种在我的部署任务中指定的方法吗?)。我在build.gradle
文件中尝试了第3个建议的答案,方法是在我的clean
(即dependsOn
中预先dependsOn(cleanClean)
,但是对于无法识别的任务会产生错误。也许第四个答案可能是工作,但我不确定我理解它。
我确实尝试将我的部署任务设置为依赖于上述三个任务,然后指定每个任务必须在相应的任务之后运行(见下文),但这似乎没有帮助。
task deploy() {
dependsOn(clean, cleanNodeJs, npmInstall)
// my deployment logic
}
cleanNodeJs.mustRunAfter(clean)
npmInstall.mustRunAfter(cleanNodeJs)
deploy.mustRunAfter(npmInstall)
希望我尝试做的事情是可能的。提前感谢您的时间和帮助!
答案 0 :(得分:1)
在构建任务图之后评估upToDateWhen
闭包时,您应该可以执行outputs.upToDateWhen { !gradle.taskGraph.hasTask(deploy) }
之类的操作。
mustRunAfter
不会添加任何依赖项。它只是定义了命令如果所涉及的任务都将被执行,但你仍然可以执行这两个任务而不执行另一个任务。