gpt4 book ai didi

gradle - 以编程方式清除Gradle任务的UP-TO-DATE属性

转载 作者:行者123 更新时间:2023-12-03 05:12:00 27 4
gpt4 key购买 nike

我需要以编程方式清除gradle任务依赖项的UP-TO-DATE属性。我正在处理一个子项目build.gradle文件,该文件处理其他子项目的集成并进行部署。仅当一项特定任务正在运行时,我才需要清除该属性。我想确保在开始部署任务之前,总是重新运行我的三个任务(cleancleanNodeJsnpmInstall)。但是,我不想影响不需要重新运行这些东西的其他任务(尤其是因为npmInstall花费了很短的时间来运行)。

我看着this类似的问题,但那里的答案对我不起作用。使用--rerun-tasks是不够的,因为它依赖于调用方来指定,并且我需要确保始终为该部署任务重新运行所需的任务。为这三个任务设置outputs.upToDateWhen { false }并不是我想要的,因为那将要求这些任务始终重新运行,即使对于不需要它们的其他任务也是如此(除非有一种方法可以在我的部署任务中指定它?)。我通过在build.gradle中添加clean(即dependsOn)来尝试dependsOn(cleanClean)文件中的第三个建议答案,但这为无法识别的任务抛出了一个错误。也许第四个答案可能有用,但我不确定我是否理解。

我确实尝试将部署任务设置为取决于上述三个任务,然后指定每个任务必须在适当的任务之后运行(请参见下文),但这似乎无济于事。

task deploy() {
dependsOn(clean, cleanNodeJs, npmInstall)
// my deployment logic
}
cleanNodeJs.mustRunAfter(clean)
npmInstall.mustRunAfter(cleanNodeJs)
deploy.mustRunAfter(npmInstall)

希望我正在尝试做的是可能的。在此先感谢您的时间和帮助!

最佳答案

在构建任务图之后评估upToDateWhen闭包时,您应该能够执行outputs.upToDateWhen { !gradle.taskGraph.hasTask(deploy) }之类的操作。
mustRunAfter不添加任何依赖项。如果涉及的两个任务都将被执行,它只是定义了的顺序,但是您仍然可以执行这两个任务而无需执行另一个任务。

关于gradle - 以编程方式清除Gradle任务的UP-TO-DATE属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43983932/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com