我正在维护有时使用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表现完全相同。
答案 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'.