gpt4 book ai didi

groovy - Gradle并不真正遵守执行顺序

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

我有一个Gradle build 3任务,第一个应该设置部署类型(测试/分段/生产),几秒钟只是一个帮助程序来显示当前类型。第三个实现了实际的部署(实际上对于这个问题并不那么重要)。像这样:

task toTest() {
project.ext.set('deployType', 'test')
println "Set deploy type: ${project.deployType}"
}
task showStatus() {
mustRunAfter = ['toTest', 'toStage', 'toProd']
println "Curr deploy type: ${project.deployType}"
}
task deploy(dependsOn: [toTest, showStatus]) {
...
}

Gradle说它按以下顺序运行的问题: toTest-> showStatus-> deploy。但正如我从控制台看到的那样,它使用不同的顺序:
////....initial tasks
:buildSrc:build UP-TO-DATE
Curr deploy type: local

Set deploy type: test
:toTest UP-TO-DATE
////.......a lot of other tasks
:showStatus UP-TO-DATE
////... final deployment

我看到两个相反的事情:执行顺序是 toTest-> showStatus,但是输出首先来自 showStatus,然后才来自 toTest。那怎么可能?我做错了什么?

Gradle 2.2

PS此外,似乎 project.ext仅被忽略,或者从其他任务中看不到值。但这似乎是另一个问题的话题。

最佳答案

如果要完成操作,则在任务定义中的代码只要“读”就执行,在任务运行时,执行“last”。 (<<doLast的简写)例如

task toTest() {
project.ext.set('deployType', 'test')
}
toTest << {
println "Set deploy type: ${project.deployType}"
}
task showStatus() {
mustRunAfter = ['toTest']
}
showStatus << {
println "Curr deploy type: ${project.deployType}"
}
task lerl(dependsOn: [toTest, showStatus]) {
println "lerl"
}


lerl
:toTest
Set deploy type: test
:showStatus
Curr deploy type: test
:lerl

关于groovy - Gradle并不真正遵守执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27840093/

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