教程 > gradle > 阅读:97

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 列出任务

自定义任务

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 自定义任务

现在,要执行我们的自定义任务,运行命令 gradle taskname(因为taskname是 jiyik_task,所以实际命令为 gradle jiyik_task)。 看下面的输出:

gradle 执行自定义任务

使用 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 中,dofirstdolast 是两个不同的自定义任务块。 这些块在块部分内定义。 在 dofirst 块中,我们确定要首先执行的任务,而 dolast 块用于最后运行任务。 考虑下面的代码片段:

task a{  
    dofirst{  
        println "hello welcome to 迹忆客"  
    }  
    dolast{  
        println "thank you bye bye."  
    }  
}  

执行上面的任务,我们可以看到下面的输出结果。

gradle 执行自定义任务 dolast dofirst

在 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 关键字与任务名称一起使用以使任务依赖。

考虑下面的示例,它包含两个名为 jiyikoperation1jiyikoperation2 的任务。 第二个任务与第一个任务有'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  
    }  
}  

查看笔记

扫码一下
查看教程更方便
网站地图