我有一个Gradle构建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
,或者从其他任务中看不到值。但似乎这是另一个问题的主题。
答案 0 :(得分:1)
任务定义中的代码只要是&#34; read&#34;就会执行。如果你想完成任务,当任务运行时,#34; last&#34;。 (<<
是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