以下代码定义了4个gradle任务:
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
Run Code Online (Sandbox Code Playgroud)
但什么是<<运营商?它在groovy中做了什么?
hee*_*nee 44
这<<
是一个左移算子.在这种情况下,task "task$counter"
是一个Task
对象声明,并<<
作为doLast
方法的别名重载,该方法将闭包附加到执行任务时要执行的操作列表.
如果未指定<<
,则闭包将被视为配置闭包,并且将在项目的构建生命周期的配置阶段默认执行,而不管命令行上给出的任何任何参数.
例:
如果您采用问题中指定的配置:
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
Run Code Online (Sandbox Code Playgroud)
并运行gradle task3
,输出将是:
:task3
I'm task number 3
Run Code Online (Sandbox Code Playgroud)
因为每个闭包都被定义为特定于任务的执行操作.因为task3
被命名为要执行的任务,所以这是唯一执行的动作闭包.
但是如果你删除<<
并进行如下配置:
4.times { counter ->
task "task$counter" {
println "I'm task number $counter"
}
}
Run Code Online (Sandbox Code Playgroud)
然后运行gradle task3
,输出将是:
I'm task number 0
I'm task number 1
I'm task number 2
I'm task number 3
:task3 UP-TO-DATE
Run Code Online (Sandbox Code Playgroud)
这是因为所有闭包都被定义为自己配置任务,而不是在运行任务时作为操作执行.因此,在这种情况下,Gradle在配置项目时执行了所有闭包,然后在执行时 task3
,没有要执行的操作,因此它将任务报告为UP-TO-DATE
.
归档时间: |
|
查看次数: |
12396 次 |
最近记录: |