Gradle leftshift<<需要任务的运算符? (这是多余的)

时间:2015-11-16 02:07:24

标签: gradle

我正在维护有时使用leftshift运算符的gradle代码<<在定义任务。它工作正常,但省略<<来自任务的操作员。

我理解左移操作符的用途如上所述 What's the operator << (double less than) in gradle?

所以...我得到了leftshift运算符&lt;&lt;的目的。它是为任务添加一组操作,当任务运行时,它将按照输入任务的相同顺序执行操作。我得到它,我可以看到它正常工作。但是,省略&lt;&lt;会导致相同的行为。我可以看到使用&lt;&lt;在Gradle中有意义,但在任务的情况下,它似乎是多余的,应该省略。这是正确的还是左移操作员有用的目的。

示例:

task Foo
task Bar

Foo << {
  println "foo action 1"
}

Foo << {
  println "foo action 2"
}

Bar  {
  println "bar action 1"
}

Bar  {
  println "bar action 2"
}

Foo和Bar表现完全相同。

2 个答案:

答案 0 :(得分:21)

左移(<<)运算符是Task.doLast()的别名,这意味着它向任务添加了一个动作。任务操作是在执行任务时评估的一些代码。省略操作员只需配置任务即可。区别在于,一个在配置时运行(当Gradle运行您的构建脚本时),另一个在execution时运行。

基本上就是这个例子

task foo << { 
    println 'bar' 
}

相当于

task foo {
    doLast {
        println 'bar'
    }
}

答案 1 :(得分:3)

Mark Vieira的答案是完全正确的,但我还要补充说明,如果没有<<运算符,关闭代码将在解析脚本时执行,而不是在执行时被执行。

当您运行&#34; clean&#34;时,这是最明显的。任务。如果您没有使用<<执行所有任务,那么gradle clean将在您的所有任务中实际执行代码。

试试这个:

的build.gradle:

apply plugin: 'groovy'

task foo { println 'foo'}

现在尝试运行干净的任务

$>gradle clean
14:23:57: Executing external task 'clean'...
foo
:clean UP-TO-DATE

BUILD SUCCESSFUL

Total time: 0.216 secs
14:23:57: External task execution finished 'clean'.`

现在,如果您添加<<

的build.gradle:

apply plugin: 'groovy'

task foo { println 'foo'}

它会这样做:

$>gradle clean
14:27:28: Executing external task 'clean'...
:clean UP-TO-DATE

BUILD SUCCESSFUL

Total time: 3.547 secs
14:27:32: External task execution finished 'clean'.