gradle中这些任务定义语法之间有什么区别?

时间:2010-05-04 18:18:43

标签: gradle

A)

task build << {  
  description = "Build task."  
  ant.echo('build')  
}

B)

task build {  
  description = "Build task."  
  ant.echo('build')  
}

我注意到,对于类型B,任务中的代码似乎在键入gradle -t时执行 - 即使只列出所有各种可用任务,也会回显“构建”。该描述实际上也以类型B显示。但是,对于类型A,在列出可用任务时不执行代码,并且在执行gradle -t时不显示描述。文档似乎没有区分这两种语法(我发现)之间的区别,只是你可以用任何一种方式定义任务。

1 个答案:

答案 0 :(得分:56)

第一种语法定义了一个任务,并提供了一些在任务执行时要执行的代码。第二种语法定义了一个任务,并提供了一些可以立即执行以配置任务的代码。例如:

task build << { println 'this executes when build task is executed' }
task build { println 'this executes when the build script is executed' }

实际上,第一种语法相当于:

task build { doLast { println 'this executes when build task is executed' } }

因此,在上面的示例中,对于语法A,描述不会显示在gradle -t中,因为设置描述的代码在执行任务之前不会执行,这在运行gradle -t时不会发生。< / p>

对于语法B,每次调用gradle都会运行执行ant.echo()的代码,包括gradle -t

要提供执行操作和任务描述,您可以执行以下任一操作:

task build(description: 'some description') << { some code }
task build { description = 'some description'; doLast { some code } }