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

gradle中这些任务定义语法之间的区别是什么?,gradle,Gradle,(A) 我注意到,对于类型B,任务中的代码似乎是在键入gradle-t-ant时执行的,即使只是列出所有可用任务,ant也会回显“build”。描述实际上也与类型B一起显示。但是,对于类型A,在列出可用任务时不执行代码,并且在执行gradle-t时不显示描述。这些文档似乎没有讨论这两种语法之间的区别(我发现),只是您可以以任何方式定义任务。第一种语法定义了任务,并提供了一些在任务执行时要执行的代码。第二种语法定义了一个任务,并提供了一些直接执行的代码来配置任务。例如: task build {

(A)


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

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

task build {  
  description = "Build task."  
  ant.echo('build')  
}
因此,在上面的示例中,对于语法A,描述不会显示在gradle-t中,因为设置描述的代码在执行任务之前不会执行,这在运行gradle-t时不会发生

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

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

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

task build(description:'some description')因此,如果您既有配置任务所需执行的代码,也有调用任务时要执行的代码,那么可以使用带有doLast闭包的语法B。看起来像

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' } }
task build(description: 'some description') << { some code }
task build { description = 'some description'; doLast { some code } }