了解Gradle动态任务

时间:2015-07-27 09:32:23

标签: groovy gradle

我正在阅读dynamic tasks in gradle并希望了解以下代码的语法和含义:

4.times { counter ->
    task "task$counter" << {
        println "I'm task number $counter"
    }
}
task0.dependsOn task2, task3
  1. 4.times是什么意思?为什么4
  2. ->是什么意思?现在我将其理解为将参数传递给任务的方法。我确信它的正确性严格来说是groovy。

3 个答案:

答案 0 :(得分:3)

基于Groovy的Gradle,你可以像groovy或java一样在gradle中编程。对于你的问题:

  1. 查看此http://mrhaki.blogspot.de/2009/09/groovy-goodness-looping-in-different.html

  2. 查看此http://www.groovy-lang.org/closures.html

答案 1 :(得分:2)

  1. 4只是一个随机值,你也可以选择10或15。该值仅用于创建多个任务。在times下调用this方法 - 将其视为迭代器。

  2. ->用于表示闭包参数名称。没有它,它看起来像这样:

    4.times { 
       task "task$it" << {
          println "I'm task number $counter"
       }
    }
    task0.dependsOn task2, task3
    

    由于it是默认的闭包参数名称。如果使用了多个闭包(如示例中所示 - 对于times并且用于添加动作),则最好使用专用名称作为闭包。以下是关于闭包的docs

答案 2 :(得分:1)

这个答案是Opal答案的延伸。

我使用上面的代码制作了一个构建脚本,并执行了以下Gradle命令。

$ gradle tasks

  

<强>输出

Other tasks
-----------
task0
task1
task2
task3
...

这意味着代码基本上创建了4个任务(显示在输出中),这是因为4.times{...}部分。它每次执行内部closure 4次传递参数counter的值。

$ gradle task3 -q

  

<强>输出

I'm task number 3

这是因为println语句为每个任务打印相应的计数器变量值,在本例中为 3

另外,我想指出Opal给出的代码片段不起作用。由于他删除了任何显式参数,因此将不再识别变量counter