10

以下两个代码片段有什么区别?

第一的:

task copyFiles(type: Copy) << {
  from "folder/from"
  into "dest/folder"
}

第二:

task copyFiles(type: Copy) {
  from "folder/from"
  into "dest/folder"
}
4

2 回答 2

16

简而言之,第一个片段弄错了,第二个片段弄对了。

Gradle 构建分为三个阶段:初始化、配置和执行。方法喜欢frominto 配置任务,因此需要在配置阶段调用它们。但是,<<(这是 的快捷方式doLast)添加了一个任务操作- 它指示任务在执行时要做什么以及何时执行。换句话说,第一个片段在执行阶段配置任务,更糟糕的是,其主要(复制)操作执行之后。因此配置不会有任何影响。

通常,一个任务要么有一个类型(它已经带来了一个任务动作),要么有一个<<(对于一个临时任务)。两者都有合法的用例(在任务的“主要”工作之后做一些自定义工作),但更常见的是,任务配置得太晚是错误的。

我通常建议使用doLast而不是<<,因为它不那么神秘并且更容易发现此类错误。(一旦你理解了这些概念,很明显这task copyFiles(type: Copy) { doLast { from ... } }是错误的。)

于 2013-03-26T09:12:17.383 回答
1

第一个代码块创建一个任务并向其附加一个动作。任务由动作组成,这些动作是在调用任务时顺序运行的指令块

第二个块创建一个任务并配置它。这些指令在 gradle“配置”生命周期阶段运行。

在这里您可以找到对差异的清晰解释

在这里您可以找到对 gradle 任务的深入解释

是关于生命周期的 gradle 指南

于 2013-03-26T09:12:30.907 回答