Gradle任务

时间:2020-01-09 10:47:06  来源:igfitidea点击:

Gradle任务定义了构建项目所需的操作。没有任务,构建脚本将不会在Gradle执行时生成任何内容。在本教程中,我们将看到如何在Gradle构建脚本中定义任务。

定义Gradle任务

我们可以在Gradle构建脚本中定义Gradle任务。我们可以在构建脚本中的几乎任何地方定义任务。

任务定义由关键字" task"和任务名称组成,如下所示:

task myTask

这行定义了一个名为" myTask"的任务。该任务没有执行任何操作,仅已定义。

任务执行阶段

当执行Gradle任务时,执行过程将经历两个阶段:

  • 第一的
  • 最后的

任务在Gradle内部表示为对象。要进入两个构建阶段,必须调用相应的方法之一,将闭包作为参数传递(闭包是匿名函数)。相应的构建阶段方法是:

  • doFirst()
  • doLast()

这是一个如何在任务中调用这两个方法的示例:

task myTask

myTask.doFirst( {
    println "This is done first"
} );

myTask.doLast( {
    println "This is done last"
} );

首先,该示例定义了一个名为" myTask"的任务。我们在本教程的前面已经看到了这一点。

其次,此示例调用myTask``doFirst()方法,并将闭包作为参数传递。闭包包含在{}字符中。大括号内的所有内容(" {"和"}")均被解释为单独的函数。

第三,该示例调用了myTask` doLast()方法,并传递了另一个闭包作为参数。

当执行任务myTask时,Gradle将首先执行doFirst()方法作为参数传递的所有闭包,然后执行doLast()方法作为参数传递的所有闭包。

较短的语法

Gradle脚本是Groovy脚本,Groovy允许进行一些语法优化以使Groovy脚本更短。

首先,如果调用方法的代码行以换行结尾,则在doFirst()和doLast()方法调用之后,不需要分号";"。

其次,在调用doFirst()或者doLast()时,不需要用括号括起来。

通过这两种语法优化,我们可以像下面这样编写doFirst()doLast()方法调用:

myTask.doFirst {
    println "This is done first"
}

myTask.doLast {
    println "This is done last"
}

这种较短的语法是我们在Gradle官方文档和其他Gradle教程中最经常看到的语法。

doLast()快捷方式表示法

通常,我们不需要将闭包传递给doFirst()doLast()。仅将单个闭包传递给doLast()方法是很常见的。因为这是一个很常见的用例,所以Gradle具有将闭包传递给doLast()方法的快捷方式。这是快捷方式doLast()调用符号的外观:

myTask <<{
    println "This is done last"
}

两个字符<<`对应于调用如下所示的doLast()方法:

myTask.doLast {
    println "This is done last"
}

我们甚至可以在将闭包传递给doLast()方法的同一行上定义任务。这是一个看起来的例子:

task myTask << {
    println "This is done last"
}

在同一Groovy语句中定义任务和last闭包可以使构建脚本更加简洁。

同一执行阶段的多次关闭

实际上,可以为同一任务执行阶段添加多个闭包。这是一个例子:

myTask.doLast {
    println "This is done 2nd last"
}
myTask.doLast {
    println "This is done last"
}

此示例在"最后"执行阶段添加了两个闭包。

添加到同一执行阶段的多个闭包将按照它们添加到执行阶段的顺序执行。在上面的示例中,首先将执行打印文本" This is last last"的闭包,然后将执行打印文本" This is last last"的闭包。

当然,添加到"第一个"执行阶段的所有闭包将在添加到"最后一个"执行阶段的任何闭包之前执行。

我们也可以使用doLast()快捷方式表示法添加多个闭包。这是一个例子:

myTask << {
    println "This is done 2nd last"
}
myTask << {
    println "This is done last"
}

默认任务

Gradle构建脚本可以包含一个或者多个默认任务。默认任务是如果我们不提供任何要执行到gradle命令的任务名称的任务。如果打开命令提示符并将目录更改为项目(包括gradle构建脚本)所在的目录,然后执行以下命令:

gradle

然后Gradle将执行该项目的Gradle构建脚本中列出的默认任务。

我们可以为Gradle构建脚本指定默认任务,如下所示:

defaultTasks 'firstTask'

本示例将名为" firstTask"的任务设置为gradle构建脚本的默认任务。

如果需要多个默认任务,则可以在第一个任务之后列出其他任务,并用逗号分隔任务名称。这是一个例子:

defaultTasks 'firstTask', 'secondTask'

任务依赖

一个任务可以依赖于另一个任务,就像在Ant中一样。如果任务B依赖于任务A,则意味着必须先执行任务A,然后才能执行任务B。如果我们执行任务B,那么Gradle将检测到依赖关系,然后先执行任务A,然后再执行任务B。

Gradle任务依赖性在任务名称后的括号内列出。这是一个Gradle任务依赖项示例:

task firstTask << {
    println "This is first task"
}

task myTask (dependsOn:firstTask) << {
    println "This is myTask"
}

这个例子定义了两个任务,分别是firstTask和myTask。 " myTask"任务取决于" firstTask"任务。这在myTask名称后的括号内表示。更具体地说,通过以下代码:

(dependsOn:firstTask)

当我们执行myTask时,Gradle将首先执行firstTask,然后执行myTask,因为myTask依赖于firstTask

实际的构建动作

到目前为止,我们所看到的任务仅打印出文本。我简化了任务,以便我们可以更轻松地了解正在发生的事情。在此Gradle教程足迹的后续文章中,我们将看到如何实际编译Java代码,运行单元测试,创建JAR文件以及类似的构建操作。