2010-05-04 31 views
42

A)gradle中这些任务定义语法之间的区别是什么?

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

B)

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

我注意到,与B型,在该任务中的代码似乎被执行打字gradle -t时 - 蚂蚁呼应了“建设”,即使刚刚上市所有各种可用的任务。该描述实际上也以类型B显示。但是,对于类型A,列出可用任务时不执行任何代码,并且执行gradle -t时不显示该描述。这些文档似乎没有涉及这两种语法(我发现)之间的区别,只是您可以以任何方式定义任务。

回答

54

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

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时不会发生。

有关语法B中做了ant.echo()被用于运行的gradle的每次调用的代码,包括gradle这个-t

要同时提供一个操作执行和您可以执行的任务的说明作者:

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

因此,如果你有两个需要执行的代码来配置任务以及调用任务时要执行的代码,带doLast闭包的语法B是要走的路。 – bergyman 2010-05-05 15:29:47

+0

看起来'''任务定义语法正在被[Gradle 3.0]删除(https://github.com/gradle/gradle/blob/master/design-docs/gradle-3.0.md#clean-up-任务DSL和层次结构)? – mkobit 2016-05-14 17:08:36

相关问题