以下两个代码片段有什么区别?
第一的:
task copyFiles(type: Copy) << {
from "folder/from"
into "dest/folder"
}
第二:
task copyFiles(type: Copy) {
from "folder/from"
into "dest/folder"
}
以下两个代码片段有什么区别?
第一的:
task copyFiles(type: Copy) << {
from "folder/from"
into "dest/folder"
}
第二:
task copyFiles(type: Copy) {
from "folder/from"
into "dest/folder"
}
简而言之,第一个片段弄错了,第二个片段弄对了。
Gradle 构建分为三个阶段:初始化、配置和执行。方法喜欢from
和into
配置任务,因此需要在配置阶段调用它们。但是,<<
(这是 的快捷方式doLast
)添加了一个任务操作- 它指示任务在执行时要做什么以及何时执行。换句话说,第一个片段在执行阶段配置任务,更糟糕的是,在其主要(复制)操作执行之后。因此配置不会有任何影响。
通常,一个任务要么有一个类型(它已经带来了一个任务动作),要么有一个<<
(对于一个临时任务)。两者都有合法的用例(在任务的“主要”工作之后做一些自定义工作),但更常见的是,任务配置得太晚是错误的。
我通常建议使用doLast
而不是<<
,因为它不那么神秘并且更容易发现此类错误。(一旦你理解了这些概念,很明显这task copyFiles(type: Copy) { doLast { from ... } }
是错误的。)