对于gradle任务“执行”意味着什么感到困惑

时间:2016-02-19 00:20:39

标签: gradle

据我了解,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()行。

因此我很困惑,它对于“执行”任务实际意味着什么,如果在这个例子中,它显然并不意味着任务中的代码语句没有执行,因为它们最明显的为了获得变更集的值。 如果任务没有执行,任务执行,如果它对任务中的代码执行或不执行没有影响,它有什么区别?

1 个答案:

答案 0 :(得分:1)

println不是特别的或与其他代码不同。任何不在doLast{}块内的代码都将在配置阶段执行,dolast{}块将在执行阶段执行。