据我了解,printlns会在任务的配置阶段显示(除非它们放在doLast操作中)。因此,给出以下任务:
ext {
changeset = 'placeholderChangeset'
}
task getChangeset {
process = '/usr/bin/git describe --always'.execute()
process.waitFor()
changeset = process.getText()
println "Changeset obtained from GIT is: $changeset"
doLast {
println '\n++++++++++++++++++++++++++++++++++'
println '+++++ task getChangeset executed'
println '++++++++++++++++++++++++++++++++++++'
}
}
如果我使用./gradlew
运行,那么输出将为:
********************************
** task getChangeset
********************************
Changeset obtained from GIT is: 9bd49ca
如果使用./gradlew getChangeset
运行它,那么输出将为:
********************************
** task getChangeset
********************************
Changeset obtained from GIT is: 9bd49ca
...
:app:getChangeset
++++++++++++++++++++++++++++++++++
+++++ task getChangeset executed
++++++++++++++++++++++++++++++++++++
在第一次运行中,任务尚未执行。然而,显示变更集的值,因此执行了process = ... execute()行。
因此我很困惑,它对于“执行”任务实际意味着什么,如果在这个例子中,它显然并不意味着任务中的代码语句没有执行,因为它们最明显的为了获得变更集的值。 如果任务没有执行,任务执行,如果它对任务中的代码执行或不执行没有影响,它有什么区别?
答案 0 :(得分:1)
println
不是特别的或与其他代码不同。任何不在doLast{}
块内的代码都将在配置阶段执行,dolast{}
块将在执行阶段执行。