以下两个代码段之间的区别是什么?
第一:
task copyFiles(type: Copy) << {
from "folder/from"
into "dest/folder"
}
第二
task copyFiles(type: Copy) {
from "folder/from"
into "dest/folder"
}
答案 0 :(得分:16)
简而言之,第一个片段是错误的,第二个片段是正确的。
Gradle构建分三个阶段进行:初始化,配置和执行。像from
和into
这样的方法配置任务,因此需要在配置阶段调用它们。但是,<<
(这是doLast
的快捷方式)会添加任务操作 - 它会指示任务如果和当它被执行时。换句话说,第一个代码段在执行阶段配置任务,更糟糕的是,在执行主要(复制)操作之后。因此配置不会产生任何影响。
通常,任务要么一个类型(已经带来任务操作)或一个<<
(用于临时任务)。有两种合法的用例(在任务的“主要”工作之后做一些自定义工作),但更常见的是没有,在任务配置太晚的情况下,这是一个错误。
我通常建议使用doLast
代替<<
,因为它不那么神秘,更容易发现这些错误。 (一旦理解了这些概念,task copyFiles(type: Copy) { doLast { from ... } }
就错了很明显。)
答案 1 :(得分:1)