Gradle自定义一个task

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gradle自定义一个task相关的知识,希望对你有一定的参考价值。

参考技术A ** 1.2.1 创建项目结构 **

在项目的根目录下面新建一个文件夹,名为buildSrc,然后依次新建子目录
src/main/groovy,然后可以建自己的包名,这里以demo.gradle.task为例,依次新建
子目录demo/gradle/task,然后在buildSrc根目录下面新建build.gradle文件,里面写入:

最终目录结构如下:

编译之后变成下面的样式:

** 1.2.2 编写task**
在demo.gradle.task包中,新建一个task类,名为HelloGradleTask.groovy,
注意在sayHello方法上的那个@TaskAction注解的作用。

** 1.2.3 使用task**
在项目中的build.gradle中添加如下脚本:

重新编译项目,在项目下面就会多了一个名为myCustomTask的task,执行task,
会打印########## custom task ###########和"Hello Gradle Custom Task"
两句话。

以上,为自定义task的所有方式。总的来说,如果只是自己项目中要使用,
第一二钟方式就满足了,然后根据task的复杂度来选择使用哪种方式。

Android Gradle 插件自定义 Gradle 任务 ③ ( Gradle 自定义任务创建方法 Project#task 函数 | Task#doFirst 函数用法 )

文章目录

Android Plugin DSL Reference 参考文档 :





一、Gradle 自定义任务创建方法 Project#task 函数



org.gradle.api.Project 配置 ( build.gradle 根配置 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html

org.gradle.api.Task 配置 ( Gradle 任务类型 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html


在 build.gradle 中自定义 Gradle 任务调用的是 org.gradle.api.Project 中的 task 方法 , 在 build.gradle 构建脚本中的如下代码 :

task Hello 
    // 任务主体内容
    println 'Hello World!'

上面的 Project # task 函数原型如下 :

Task task​(String name,
          Closure configureClosure)
          
Creates a Task with the given name and adds it to this project. 
Before the task is returned, the given closure is executed to configure the task.
创建具有给定名称的Task并将其添加到此项目。
在返回任务之前,将执行给定的闭包来配置任务。

After the task is added to the project, it is made available as a property of the project, 
so that you can reference the task by name in your build file. See here for more details
将任务添加到项目中后,它将作为项目的属性可用,
以便可以在构建文件中按名称引用任务。有关详细信息,请参阅此处

Parameters:
name - The name of the task to be created. 
       要创建的任务名称
configureClosure - The closure to use to configure the created task. 
                   配置要创建任务的闭包
Returns:
The newly created task object. 最新创建的任务对象.
Throws:
InvalidUserDataException - If a task with the given name already exists in this project.
                           如果该名称已经被占用则抛出异常.

文档地址 : https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html#task-java.lang.String-groovy.lang.Closure-


由以上返回值可知 , 创建的任务对象是 Task 接口类型 , 该接口类的文档如下 :

org.gradle.api.Task 配置 ( Gradle 任务类型 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html





二、Task#doFirst 函数用法



org.gradle.api.Task 配置 ( Gradle 任务类型 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html


在自定义 Gradle 任务中 , 可以实现 Task 接口的 doFirst 函数 , 其作用是在 任务执行后 最先执行的内容 , 任务中可以执行多个 Task#doFirst 函数 , 按照先后顺序执行 , 先定义的后执行 , 后定义的先执行 ;


Task#doFirst 函数原型如下 :

Task doFirst​(Closure action)

Adds the given closure to the beginning of this task's action list. 
The closure is passed this task as a parameter when executed.
将给定的闭包添加到此任务的操作列表的开头。
闭包在执行时作为参数传递给此任务。

Parameters:
action - The action closure to execute.
         要执行的操作闭包。
Returns:
This task.

文档位置 : https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html#doFirst-groovy.lang.Closure-

以上是关于Gradle自定义一个task的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle 插件自定义 Gradle 任务 ③ ( Gradle 自定义任务创建方法 Project#task 函数 | Task#doFirst 函数用法 )

Android Gradle 插件自定义 Gradle 任务 ④ ( Task#doLast 函数用法 | 自定义 Gradle 任务代码示例 )

Android Gradle 插件自定义 Gradle 任务 ④ ( Task#doLast 函数用法 | 自定义 Gradle 任务代码示例 )

gradle:自定义任务task

gradle 自定义task 实现发版

gradle 自定义task 实现发版