Gradle任务中的变量$ it:参考:《 Gradle in Action》

时间:2019-03-20 07:11:04

标签: gradle groovy build.gradle

在阅读本书的过程中,我碰到了这条线

  

Groovy自动公开一个名为它的隐式变量以指示   循环迭代索引。

摘自Gradle in Action,第2章清单2.1

该行说$ it代表循环迭代索引。但是当我尝试添加  $it到任务yayGradle0 / 1/2的println语句,它打印出任务而不是索引。我对此行为感到困惑。请指导。

3.times{
    task "yayGradle$it" <<{
        println 'Gradle rocks--->>>'+"$it"
    }
}

运行任务yayGradle0后的输出为:

Gradle rocks--->>>task ':yayGradle0'

2 个答案:

答案 0 :(得分:1)

(重读后编辑)

it是循环索引。

从groovy shell中

  3.times  {
    println "${it}"
  }

0
1
2

在您的代码中还有另一个闭包,它变为该闭包的变量(即任务名称)

下面的示例在顶层使用显式变量。

3.times{ counter->
    task "hello${counter}" <<{
        println 'Gradle rocks--->>>'+" ${it}  ${counter}"
    }
}

$ gradle hello2得到以下输出。

  

任务:hello2   摇篮石--- >>>任务':hello2'2

引用

novice groovy closures

答案 1 :(得分:1)

您在与presented in the book不同的上下文中使用it变量。在您的情况下,您正在任务Closure的上下文中工作。因此,it代表一个不同的对象,一个org.gradle.api.Task实例。引用Closure delegation strategies会很有帮助。另请参见Appendix B in the book