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

ber*_*man 42 gradle

一个)

task build << {  
  description = "Build task."  
  ant.echo('build')  
}
Run Code Online (Sandbox Code Playgroud)

B)

task build {  
  description = "Build task."  
  ant.echo('build')  
}
Run Code Online (Sandbox Code Playgroud)

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

小智 56

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

task build << { println 'this executes when build task is executed' }
task build { println 'this executes when the build script is executed' }
Run Code Online (Sandbox Code Playgroud)

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

task build { doLast { println 'this executes when build task is executed' } }
Run Code Online (Sandbox Code Playgroud)

因此,在上面的示例中,对于语法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 } }
Run Code Online (Sandbox Code Playgroud)