有时候我会看到:
task hey << {
println "Hello, Gradle!"
}
其他时候我看到:
task hey {
println "Hello, Gradle!"
}
何时使用“<<
”以及何时不使用(及其原因)?
答案 0 :(得分:8)
<<
是doLast
的简写。你问题中的任务并不等同。
这个任务:
task hey << {
println "Hello, Gradle!"
}
等同于此任务:
task hey {
doLast {
println "Hello, Gradle!"
}
}
无论您是否正在运行该特定任务,每次执行构建脚本时,第二个示例中的代码都将执行。例如,如果您有以下任务然后运行gradle goodbye
,您会看到&#34; Hello,World!&#34;和#34;再见,世界!&#34;即使你只是在执行&#34;再见&#34;任务:
task hello {
println "Hello, world!"
}
task goodbye {
println "Goodbye, world!"
}
结果:
$ gradle goodbye
Hello, world!
Goodbye, world!
:goodbye UP-TO-DATE
但是,如果您更新了任务定义以使用<<
或doLast
(例如task hello << {}
),那么您只会看到执行任务中的println
。< / p>
Adam Murdoch描述了任务中的代码何时将在this post中执行。我在这里引用了一些相关信息:
与任务相关的代码有2个不同的时间点 执行:第一个是配置时间,即构建时 脚本执行。这个想法是在这个时候你配置任务, 这样它就可以在另一个时间点做正确的事情,即 执行时间处理时间。执行时间是任务的时间点 做它的实际工作,并且仅在选择任务时才会发生 执行,并在其依赖执行后。
每个任务都有一系列操作,这些操作按顺序运行 任务执行时指定。一个动作只是一个闭包或一个 行动实施。 doFirst()方法配置要添加的任务 序列开始时的动作。 doLast()和&lt;&lt;方法 配置任务以在序列结束时添加操作。
答案 1 :(得分:2)
此:
task hello {
doLast {
println 'Hello world!'
}
}
可写成:
task hello << {
println 'Hello world!'
}
组合doc中的语句(示例6.10附近):
&lt;&lt; operator只是doLast的别名(它将操作添加到任务操作列表的末尾)
答案 2 :(得分:0)
您可能希望使用doLast
表示法的时间是您希望将任务定义与任务配置相结合。所以不要单独做它们:
task helloCopy << {
println "hello"
}
task(helloCopy, type: Copy) {
from(file('srcDir'))
into(buildDir)
}
...如果您愿意,可以执行以下操作:
task(helloCopy, type: Copy) {
from(file('srcDir'))
into(buildDir)
doLast {
println "hello"
}
}
您是否更喜欢这种风格是个人偏好,但它会将任务的所有规格保持在一起。