以编程方式清除gradle任务的最新属性

以编程方式清除gradle任务的最新属性,gradle,groovy,build.gradle,Gradle,Groovy,Build.gradle,我需要通过编程清除gradle任务依赖项的最新属性。我在一个子项目build.gradle文件中工作,该文件处理其他子项目的集成并部署它们。仅当一个特定任务正在运行时,我需要能够清除属性。我想确保我的三个任务(clean、cleanNodeJs和npmInstall)在开始部署任务之前始终重新运行。但是,我不想影响其他任务,因为它可以接受不重新运行这些东西(特别是因为npmInstall需要花费大量的时间来运行) 我看了类似的问题,但那里的答案不适合我。使用--reruntasks是不够的,因为

我需要通过编程清除gradle任务依赖项的最新属性。我在一个子项目
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虽然我知道,你还不能,但你错过了一个能够投票的名声。:-)