Gradle任务差异

时间:2013-03-26 08:45:33

标签: gradle

以下两个代码段之间的区别是什么?

第一:

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

第二

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

2 个答案:

答案 0 :(得分:16)

简而言之,第一个片段是错误的,第二个片段是正确的。

Gradle构建分三个阶段进行:初始化,配置和执行。像frominto 这样的方法配置任务,因此需要在配置阶段调用它们。但是,<<(这是doLast的快捷方式)会添加任务操作 - 它会指示任务如果它被执行时。换句话说,第一个代码段在执行阶段配置任务,更糟糕的是,在执行主要(复制)操作之后。因此配置不会产生任何影响。

通常,任务要么一个类型(已经带来任务操作)一个<<(用于临时任务)。有两种合法的用例(在任务的“主要”工作之后做一些自定义工作),但更常见的是没有,在任务配置太晚的情况下,这是一个错误。

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

答案 1 :(得分:1)

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

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

here你找到了明显的差异解释

here你可以找到对gradle任务的深入解释

here是关于生命周期的gradle指南