gradle 项目和任务——迹忆客-ag捕鱼王app官网
gradle build 由一个或多个项目组成。 gradle 中的一切都是基于项目和任务的。
gradle 任务
在 gradle 中,任务是构建执行的单个工作单元。这些任务可以是编译类、创建 jar、生成 javadoc 以及将一些档案发布到仓库等等。 它可以被视为构建过程的单个原子工作。
gradle 的优势在于他的可扩展模型; 任务是这个模型的核心。 任务是 gradle 运行的独立单元。 任务的本质是它的动作。 例如,我们可以声明一个任务来编译 java 源代码或将一些数据从一个目录复制到另一个目录。 一个任务可以单独执行一些动作,但我们也可以声明对其他任务的依赖。 任务还可以定义它的输入和它读取和写入的文件的输出。 这允许 gradle 确定是否需要完成任务。
gradle 项目
在 gradle 中,一个项目显示一个库 jar 或一个 web 应用程序。 它还可以提供一个分发 zip,该 zip 由其他项目生成的 jar 组装而成。 一个项目可以将我们的应用程序部署到暂存或生产环境。 gradle 中的每个项目都由一个或多个任务组成。我们可以将其与构建的示例联系起来; 它可以有任意数量的层。
任务类型
gradle 中有两种类型的任务。 它们如下:
- 默认任务
- 自定义任务
默认任务
默认任务是 gradle 的预定义任务。 我们可以在我们的项目中定义它。 gradle 让我们定义一个或多个默认任务,如果没有指定其他任务则执行这些任务。
我们可以通过运行 gradle task
命令列出默认任务。 如下所示:
自定义任务
gradle 允许我们创建任务; 这些任务称为自定义任务。 自定义任务是为执行某些特定工作而构建的用户定义任务。
语法
task task_name{
group "-------group_name for task-------'
description '-------description of the task-------'
dolast{
-------code for execution-------
-----------------------------------
-----------------------------------
}
}
下面我们来创建一个任务。打开 build.gradle ,添加如下内容
task jiyik_task{
group "custom task"
description "迹忆客 gradle custom task example."
dolast{
println "welcome to 迹忆客. it is a custom task example.";
}
}
然后我们继续使用 gradle task
命令来查看我们的任务
现在,要执行我们的自定义任务,运行命令 gradle taskname
(因为taskname是 jiyik_task,所以实际命令为 gradle jiyik_task
)。 看下面的输出:
使用 dsl 特定语法定义任务
在新文件夹中,使用以下代码创建 build.gradle 文件(使用 groovy dsl 编写)或 build.gradle.kts 文件(使用 kotlin dsl 编写):
tasks.register("hello") {
dolast {
println 'hello, world!'
}
}
上面的 groovy 代码将注册一个名为 hello 的新必需任务,并将消息打印到控制台。
保存文件并运行以下命令:
$ gradle tasks --all
我们的新任务将出现在其他任务下。
使用字符串作为任务名称定义任务:
我们可以使用字符串作为任务名称来定义任务。 例如,我们要定义一个任务名称 'hello',将以下代码放入 build.gradle 文件中:
task('hello') {
dolast {
println "hello"
}
}
task('copy', type: copy) {
from(file('srcdir'))
into(builddir)
}
还有另一种定义任务的方法(我们也可以使用任务容器来定义任务)。
使用任务容器定义任务
taskcontainer
管理一组 task 实例。 我们可以通过调用 project.gettasks()
来访问 taskcontainer
实例,也可以在构建脚本中使用 tasks 属性。
我们看下taskcontainer的定义:
public interface taskcontainer extends taskcollection, polymorphicdomainobjectcontainer
使用 taskcontainer
定义任务的“hello world”示例如下:
tasks.create('hello') {
dolast {
println "hello"
}
}
tasks.create('copy', copy) {
from(file('srcdir'))
into(builddir)
}
在这里,我们可以将任务添加到任务集合中。
自定义任务中的 dofirst 和 dolast 块
在 gradle 中,dofirst
和 dolast
是两个不同的自定义任务块。 这些块在块部分内定义。 在 dofirst
块中,我们确定要首先执行的任务,而 dolast
块用于最后运行任务。 考虑下面的代码片段:
task a{
dofirst{
println "hello welcome to 迹忆客"
}
dolast{
println "thank you bye bye."
}
}
执行上面的任务,我们可以看到下面的输出结果。
在 gradle 中复制任务
gradle 允许我们将任务从一个目录复制到另一个目录。 以下语法用于复制任务:
task task_name(type: copy){
from "--------------------directorypath----------------"
into " --------------------directorypath----------------"
}
任务分组
在 gradle 中,我们可以对任务进行分组。 为了对任务进行分组,我们将为所有任务使用相同的组名。 要对名为 jiyik1 和 jiyik2 的两个任务进行分组,请将以下代码写入 build.gradle 文件:
task jiyik1{
group "jiyik_task"
dolast{
println "this is a task 1."
}
}
task jiyik2{
group "jiyik_task"
dolast{
println "this is a task 2."
}
}
跳过任务
在 gradle 中,有多种方法可以跳过任务的执行。 要跳过任务,请将 onlyif()
附加到任务代码。 考虑下面的代码片段:
task jiyik1{
group "jiyik_task1"
dolast{
println "this is a task."
}
}
jiyik1.onlyif{
project.hasproperty('dooperation')
}
使用谓词跳过任务
在 gradle 中,onlyif()
方法可以附加一个谓词。 在这种情况下,任务仅在谓词为真时执行。 谓词实现为闭包,并通过参数传递。 如果任务被执行,则返回 true,否则返回 false。 如果任务被跳过。 谓词在任务之前进行评估。 考虑下面的代码片段:
task test_jiyik{
group "task1"
dolast{
println "this is a task."
}
}
test_jiyik.onlyif{
!project.hasproperty('skiptest')
}
使用 stopexecutionexception 跳过任务
在 gradle 中,我们还可以使用 stopexecutionexception
而不是谓词跳过任务。 如果这个异常被抛出到一个任务中,则跳过该任务的动作,并且构建继续执行下一个任务。 考虑下面的代码片段:
task compile{
dolast{
println "here we are compiling"
}
}
compile.dofirst{
if (true)
{
throw new stopexecutionexception()
}
}
task javatpoint (dependson: 'compile') {
dolast{
println 'i am not affected'
}
}
启用和禁用任务
gradle 允许我们启用和禁用任务; 默认情况下,它是启用的。 要禁用任务,我们必须将其标记为已跳过。 考虑下面的代码片段:
task jiyik_disabletask{
dolast{
println "this statement should not be printed if the task is disabled."
}
}
jiyik_disabletask.enabled = false
gradle 中的任务依赖
当一个任务依赖于另一个任务时使用任务依赖。 dependson
关键字与任务名称一起使用以使任务依赖。
考虑下面的示例,它包含两个名为 jiyikoperation1 和 jiyikoperation2 的任务。 第二个任务与第一个任务有'depends on'
关键字,这意味着第二个任务只有在第一个任务成功执行时才会执行:
task jiyikoperation1{
group "customtasks"
dolast{
println "this is operation 1 of jiyik"
}
}
task jiyikoperation2(dependson: 'javatpointoperation1'){
group "customtasks"
dolast{
println "this is operation 2 of jiyik"
}
}
gradle 中任务的快捷方式表示法
我们可以创建现有任务的快捷方式,每个任务都被视为构建脚本的属性。 为此,请在 build.gradle 文件中添加以下代码片段。
task jiyik {
dolast {
println 'hello world!'
}
}
jiyik.dolast {
println "greetings from the $jiyik.name task."
}
任务中的自定义属性
在 gradle 中,我们可以创建属性并将其添加到任务中。 要添加属性,请将 ext.myproperty
设置为任务的初始值。 考虑下面的代码片段:
task jiyiktask {
ext.myproperty = "this is a custom property"
}
task printtask {
dolast {
println jiyiktask.myproperty
}
}