理解Gradle / Groovy任务的微妙之处

时间:2014-06-06 18:59:52

标签: java groovy gradle

运行构建脚本时出错:

task pullInDeps(dependsOn: copyMod, description: 'Pull in all the module dependencies for the module into the nested mods directory') {
if (pullInDeps == 'true') {
    setSysProps()
    def args = ['pulldeps', moduleName]
    Starter.main(args as String[])
}
}

但是,运行时我没有收到错误:

task pullInDeps(dependsOn: copyMod, description: 'Pull in all the module dependencies for the module into the nested mods directory') << {
    if (pullInDeps == 'true') {
        setSysProps()
        def args = ['pulldeps', moduleName]
        Starter.main(args as String[])
    }
}

注意:区别在于&lt;&lt;在定义任务时。另请注意,如果前者使用围绕doLast{}的{​​{1}},则可以使用if statement。它在使用doFirst{}

时有效

- 这是来自vert.x gradle-template-example(但将其添加到我自己的项目中)。

我真的只是想更好地理解gradle / groovy,因为我已经解决了这个问题。

编辑:

ERROR:

* What went wrong:
A problem occurred evaluating script.
> Could not find property 'Starter' on task ':pullInDeps'.

我不确定为什么leftShiftdoFrist/Last()会对Starter产生影响。

1 个答案:

答案 0 :(得分:2)

有关的task有一个与它相关的动作(闭包内的逻辑),用leftShift运算符表示。这是实际的语义:

task pullInDeps << { task action }

任务本身作为一个参数传递给闭包,以便定义一个动作。

这与doFirst { }doLast { }同义,后者将任务本身作为参数。

如果您将任务定义为:

task pullInDeps { }

任务本身将被配置而不是定义任何动作,因此任务本身作为参数在闭包中不可用。

请参阅Task Actions中的第二段。