学习资料 Writing Custom Task Classes

概述

gradle中的Task生成有两种途径

  • 由Plugin引入
  • 在build.gradle文件中直接创建

这两种情况在之前的示例中都有演示,比如引入java插件,就可以应用java插件中定义的任务;在build.gradle中直接创建可以参考 构建脚本要素之task 这两种情况都不是本章节介绍的重点~,重点是改变我们创建的任务类型,我们所创建的Task的默认类型是DefaultTask,该类型是一个非常通用的Task类型,若需要具有特定功能的Task,如定义自己创建的Task类型,那默认类型就无能为力了,所以本章节尝试创建自己的任务类型

任务类源代码存放位置

Build script

可以在构建脚本中直接包含任务类。这样做的好处是可以自动编译任务类,并将其包含在构建脚本的类路径中,而无需做任何事情。然而,任务类在构建脚本之外是不可见的,因此您不能在构建脚本之外的构建脚本之外重用任务类。

buildSrc project

可以把任务类的源代码存放在rootProjectDir/buildSrc/src/main/groovy目录中。gradle将负责编译和测试任务类,并使其在构建脚本的类路径中可用。任务类对构建所使用的每个构建脚本都是可见的。但是,它在构建之外是不可见的,因此不能在它定义的构建之外重用任务类。使用buildSrc项目方法将任务声明——也就是任务应该做的——从任务实现中分离出来——也就是任务执行的方式。

Standalone project

可以为任务类创建一个单独的项目。这个项目生成并发布一个JAR,您可以在多个构建中使用它,并与其他版本共享。通常,这个JAR可能包含一些定制的插件,或者将几个相关的任务类捆绑到一个单独的库中。或者两者的结合。

自定义Task类型

要实现自定义任务类,需要继承DefaultTask DefaultTask详细说明
对应任务类型源代码存放的方式有三种方法可以自定义任务

在build.gradle文件中直接定义task类型

class UserDefined extends DefaultTask {@TaskActiondef fun(){println "I'm hererrrrrrrrrrr"}
}
task testTask(type:UserDefined)
c:\>gradle testTask
:testTask
I'm hererrrrrrrrrrrDeprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
See https://docs.gradle.org/4.5.1/userguide/command_line_interface.html#sec:command_line_warningsBUILD SUCCESSFUL in 3s
1 actionable task: 1 executed

将一个方法添加到任务中,并使用TaskAction注释标记它。当任务执行时,Gradle将调用方法。不需要使用方法来定义任务的行为。如,可以在任务构造函数中调用doFirst()或doLast(),以添加行为
当然还可以为任务类型添加属性

class UserDefined extends DefaultTask {String greeting = 'hello from GreetingTask'@TaskActiondef fun(){println "I'm hererrrrrrrrrrr"}
}
//使用默认的字符串
task testTask(type:UserDefined)
//使用自定义的字符串
task greeting(type:UserDefined){greeting = 'greetings from GreetingTask'
}

在当前工程中定义Task类型

在buildSrc目录下定义Task类型,Gradle在执行时,会自动地查找该目录下所定义的Task类型,并首先编译该目录下的groovy代码以供build.gradle文件使用。

  • 先创建一个gradle工程
  • 在当前工程的buildSrc/src/main/groovy/davenkin目录下创建UserDefined .groovy文件
  • 编写任务类型代码
package userDefined.test.demo
import org.gradle.api.*
import org.gradle.api.tasks.*class UserDefined extends DefaultTask {String greeting = 'hello from GreetingTask'@TaskActiondef fun(){println "I'm hererrrrrrrrrrr"}
}

在build.gradle文件中引用该Task时,需要它的全名称:

//使用默认的字符串
task testTask(type:userDefined.test.demo.UserDefined)
//使用自定义的字符串
task greeting(type:userDefined.test.demo.UserDefined){greeting = 'greetings from GreetingTask'
}

单独的项目中定义Task类型

虽然第二种方式Task定义与build.gradle分离开了,但是它依然只能应用在当前工程中。如果我们希望所定义的Task能够用在另外的项目中,方法便不可行的,此时我们可以将Task的定义放在单独的工程中,然后在所有使用Task的工程中通过声明依赖的方式引入这些Task。

从定义到使用共三步:编写自定义任务、发布自定义任务、引用自定义任务

  • 在工程源码包中新建文件(就是重复第二种做的事情了)
package userDefined.test.demo
import org.gradle.api.*
import org.gradle.api.tasks.*class UserDefined extends DefaultTask {String greeting = 'hello from GreetingTask'@TaskActiondef fun(){println "I'm hererrrrrrrrrrr"}
}
  • 修改build.gradle
apply plugin: 'groovy'
apply plugin: 'maven'
version = '1.0.0'
group = 'userDefinedtest'
archivesBaseName = 'userDefinedTask'repositories.mavenCentral()dependencies {compile gradleApi()groovy localGroovy()
}
uploadArchives {repositories.mavenDeployer {repository(url: 'file:../lib')}
}

执行”gradle uploadArchives”,所生成的jar文件将被上传到上级目录的lib(../lib)文件夹中。

  • 在其他项目中使用:build.gradle文件配置:
buildscript {repositories {maven {url 'file:../lib'}}dependencies {classpath group: 'userDefinedtest', name: 'userDefinedTask', version: '1.0.0'}
}task test(type: userDefinedtest.UserDefined)

未完待续~~~~

gradle自定义任务相关推荐

  1. Android Gradle 自定义Task详解二:进阶

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78523958 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  2. Android Gradle 自定义Task 详解

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/76408024 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  3. Gradle自定义插件

    本教程介绍了创建Gradle独立自定义插件的方法. 它涵盖以下主题 创建任务,并在"自定义"插件中使用它 独立的自定义插件 简短的插件ID 使用settings.gradle自定义 ...

  4. Gradle 自定义Plugin插件之360加固

    之前发布的文章:Gradle 自定义Plugin插件之上传APK到蒲公英.让我们知道了自定义插件的一些功能. 一般来说,在发布的时候,我们的APK都需要加固的,毕竟安全点.这里,我们就结合之前的插件, ...

  5. Gradle 自定义Plugin插件之发送钉钉通知

    在之前的文章中,我们介绍了怎么使用Gradle插件,apk加固,上传到蒲公英. 这篇文章,主要就是把流程进一步完善,通过Gradle插件实现:打包-加固-上传蒲公英-发送钉钉消息,实现完全自动化.. ...

  6. Gradle 自定义Plugin插件之上传APK到蒲公英

    在之前的文章:Gradle 自定义Plugin插件介绍 中,介绍了通过Gradle自定义插件的几种方式. 作为一个的Coder,我们当然不希望我们自定义插件只是简单的打印log啦.比如,之前我们版本开 ...

  7. android自定义task,Android Gradle 自定义Task 详解

    一:Gradle 是什么 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具. 它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于X ...

  8. android定义 task,Android Gradle 自定义Task 详解

    一:Gradle 是什么 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具. 它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于X ...

  9. gradle自定义plugin实践之360多渠道加固打包

    项目地址 使用AndroidStudio新建一个工程或者新建一个module, 在src/main下新建两个文件夹,groovy.resources, PS:这里的名字其实叫什么都可以,之前的java ...

最新文章

  1. mycat快速体验(转)
  2. python 分类变量转因子变量_python – 将分类变量的Pandas DataFrame转换为具有计数和比例的MultiIndex...
  3. sql读取excel数据_Python 读取 Excel 数据,并插入到MySQL
  4. epoll nio区别_高性能网络服务器编程:为什么linux下epoll是最好,Netty要比NIO.2好?...
  5. 粒子运动模拟 - Verlet积分算法简介
  6. Oracle中wm_concat函数报错解决方法
  7. 手机应用只清理不够,还要卸载
  8. idea中导包的快捷键如何使项目自动导包
  9. 怎样在Excel顶部单元格操作锁定,技巧干货!Excel如何冻结首行单元格?
  10. 用u盘linux系统视频,用U盘怎么安装Linux系统
  11. 【退役文】人退心不退,博客有空继续更
  12. 真offer收割机!190道大数据面试真题大汇总(附答案详解)
  13. LOJ10144宠物收养所
  14. CSS calc() 使用指南
  15. Android 7再带壁纸,Android7 添加壁纸系统或替换系统壁纸
  16. Cuckoo安装指南(二)
  17. 老生常谈:让软件留下临终遗言并优雅地关闭
  18. 数据库实时异地备份怎么实现
  19. [CTFSHOW]CTFSHOW击剑杯 部分WP
  20. 2020深圳计算机初级职称,2020年深圳入户积分职称分,这些证书你值得拥有!

热门文章

  1. Swift5.1 语言指南(三) 快速之旅
  2. 测试工程师简历编写指南
  3. 集体封盘,深度回撤,量化私募的高光时刻已不再?
  4. 学计算机惠普和联想笔记本哪个好,笔记本做得好,未必只有惠普和联想
  5. 算法:最长公共子序列(输出所有最长公共子序列)
  6. Oracle数据库设计方法
  7. 如何取消服务器自动关机,服务器自动关机求助
  8. 在Linux中直接通过wget从网上下载jdk1.8
  9. 百度服务器自动重启,百度云服务器重启的两种方法介绍
  10. 百度霸屏引流推广需要多少钱?那么才能霸屏?百度霸屏有什么好处?