Gradle doFirst和doLast的设计目的是什么?

时间:2016-10-04 09:24:11

标签: gradle

例如,我有Gradle脚本,如:

myTask_A {
    doFirst {
        println "first string"

    }
    doLast {
        println "last string"
    }
}

以下两个任务具有完全相同的执行结果:

myTask_B {
    doFirst {
        println "first string"
        println "last string"
    }
}

myTask_C {
    doLast {
        println "first string"
        println "last string"
    }
}

doFirst& amp;的设计目的是什么? doLast,因为上述任何任务产生相同的结果?

1 个答案:

答案 0 :(得分:21)

它与可扩展性,重用和避免重复有关。

对于一个内置任务,可以扩展为:

task CopyAndThen(type: Copy) {
   doFirst {
      println "this is before the actual copy"
   }
   doLast {
      println "this is after the actual copy"
   }
}

我想到的第二个常见场景是multi project builds,您可以在项目顶部使用常见行为定义任务定义:

allprojects {
    task myTask_a {
        doFirst {...}
    }
}

然后具体项目可以扩展。 该任务基本上有一个需要运行的Closures列表,以及doFirstdoLast控件的选择,插入到的列表的末尾。