以编程方式清除gradle任务的最新属性
我需要通过编程清除gradle任务依赖项的最新属性。我在一个子项目以编程方式清除gradle任务的最新属性,gradle,groovy,build.gradle,Gradle,Groovy,Build.gradle,我需要通过编程清除gradle任务依赖项的最新属性。我在一个子项目build.gradle文件中工作,该文件处理其他子项目的集成并部署它们。仅当一个特定任务正在运行时,我需要能够清除属性。我想确保我的三个任务(clean、cleanNodeJs和npmInstall)在开始部署任务之前始终重新运行。但是,我不想影响其他任务,因为它可以接受不重新运行这些东西(特别是因为npmInstall需要花费大量的时间来运行) 我看了类似的问题,但那里的答案不适合我。使用--reruntasks是不够的,因为
build.gradle
文件中工作,该文件处理其他子项目的集成并部署它们。仅当一个特定任务正在运行时,我需要能够清除属性。我想确保我的三个任务(clean
、cleanNodeJs
和npmInstall
)在开始部署任务之前始终重新运行。但是,我不想影响其他任务,因为它可以接受不重新运行这些东西(特别是因为npmInstall
需要花费大量的时间来运行)
我看了类似的问题,但那里的答案不适合我。使用--reruntasks
是不够的,因为它依赖于调用方来指定,并且我需要确保为此部署任务始终重新运行我所需的任务。为这三个任务设置outputs.upToDateWhen{false}
也不是我想要的,因为这将要求这些任务始终重新运行,即使对于不需要它们的其他任务也是如此(除非有办法在我的部署任务中指定)。我在build.gradle
文件中尝试了第三个建议答案,在我的dependsOn
中预先添加了clean
(即dependsOn(cleanClean)
),但这为无法识别的任务抛出了一个错误。也许第四个答案可行,但我不确定我是否理解它
我确实尝试过将部署任务设置为依赖于上述三个任务,然后指定每个任务都必须在相应的任务之后运行(请参见下文),但这似乎没有帮助
task deploy() {
dependsOn(clean, cleanNodeJs, npmInstall)
// my deployment logic
}
cleanNodeJs.mustRunAfter(clean)
npmInstall.mustRunAfter(cleanNodeJs)
deploy.mustRunAfter(npmInstall)
希望我尝试做的是可能的。提前感谢您的时间和帮助!当任务图构建后评估
UpdateWhen
闭包时,您应该能够执行类似outputs.UpdateWhen{!gradle.taskGraph.HastTask(deploy)}
的操作
mustRunAfter
不添加任何依赖项。它只定义了顺序如果两个相关任务都将执行,但您仍然可以执行两个任务而不执行另一个任务。感谢您提供的有用信息。我将接受这个答案,因为我相信它可以帮助其他人,但是,我的问题最终成为一个结果我忽略了任务名称冲突。我的部署任务名称以check
开始,我选择了运行/gradlew check
的快捷方式,而不是键入完整的任务名称。我们已经有一个gradle任务(在父build.gradle
文件中)名为check
,这就是为什么我没有看到我的预期行为。我们的clean
和cleanNodeJs
任务实际上从未被认为是最新的,所以我甚至不需要为这些任务清除该属性。好吧,太好了。check
实际上是由基本插件添加的标准任务,它会自动更新几乎所有其他插件都使用过,比如java
e.g.:-)顺便说一句。请阅读并遵守stackoverflow.com/help/someone-answers;-)对不起,我正在努力遵守规则,但在这种情况下,我不清楚是否应该提供附加信息作为评论,或者提交我自己的答案,解释我的实际问题是什么。我觉得你的回答比我的实际问题对未来的观众更有益,所以这就是我为什么选择我的路线。不幸的是,这一评论现在可能也违反了规则:(好吧,实际上我只是要求我的投票权。:-D虽然我知道,你还不能,但你错过了一个能够投票的名声。:-)