自己定义Gradle插件之”Hello World”


0.新建一个用于开发这个插件的目录

1.确定Plugin id

Plugin id一般定义为java 包名。

  • 由字母和数字及“.”和“-”组成
  • 至少有一“.”字符
  • org.gradle 和 com.gradleware 不能使用
  • 不能以“.“開始或结尾
  • 不能含有连续的“.”

本实例的Plugin id为:me.zhangls.custom

2.配置插件

在确定的目录下建好src/main/resources/META-INF/gradle-plugins/目录结构,在使用那个plugin id新建一个me.zhangls.custom.properties文件。里面配置为

implementation-class=me.zhangls.custom.CustomPlugin

3.写Plugin类

依据implementation-class那个包名路径,详细目录为src/main/groovy/me/zhangls/custom/CustomPlugin.groovy去建立Plugin实现类

package me.zhangls.custom

import org.gradle.api.Plugin
import org.gradle.api.Project public class CustomPlugin implements Plugin<Project> {
void apply(Project project) {
project.task('hello') << {
println "Hello World"
}
}
}

解释说明

  • 这个Project就是后面那个使用插件的那个build.gradle(一个build.gradle文件就是一个project)
  • 为什么一定要project.task('hello') <<这么怪异的写法,直接用project.task('hello')不能够吗?它们的差别是:前一个在配置阶段。后一个是在执行阶段。

    实际的含义你懂的,嘻嘻。

4.安装插件

//apply是Project的一个方法。plugin是一个參数,maven是一个值
//用来部署到本地maven仓库
apply plugin: 'maven'
//用来编译Groovy代码(由于我的插件是用groovy写的)
apply plugin: 'groovy' //dependencies是Project的一个方法。而{}里面是一个闭包,相当于匿名方法块。
dependencies {
//加入Gradle Api依赖
compile gradleApi()
//加入本地groovy依赖
compile localGroovy()
} //这三个字段都要加,用来表示安装到本地maven仓库的位置。 group = 'me.zhangls'
//网上有这么写的。也有效果,主要是能够改变项目名称,可是在文档中没有找到相关说明。
//也能够不写,那么会取目录的名称,来作为这个值。 archivesBaseName = 'custom'
//版本
version = '0.1'

执行gradle install安装的本地Maven仓库

建议这个时候,能够使用Android Studiod导入这个项目,进行兴许的开发。

  • 本身as不支持创建gradle plugin功能
  • 建好对应的目录结构。as能够创建一个项目

5.使用插件

//配置执行脚本所须要的环境
buildscript {
//配置仓库
repositories {
mavenLocal()
}
//制定要依赖仓库里详细插件
dependencies {
classpath 'me.zhangls:custom:0.1'
}
}
//应用这个插件
apply plugin: 'me.zhangls.custom'

执行gradle hello,就能够看到Hello World了

6.写Task类(可选)

  1. 改动CustomPlugin

    project.task('hello',Type: HelloTask)
  2. 加入一个HelloTask
package me.zhangls.custom;

import org.gradle.api.DefaultTask;
import org.gradle.api.tasks.TaskAction; public class HelloTask extends DefaultTask {
//当执行这个任务的时候,执行这种方法。 @TaskAction
def action() {
println "hello"
}
}

自己定义Gradle插件之&quot;Hello World&quot;的更多相关文章

  1. 怎样使用Android Studio开发Gradle插件

    缘由 首先说明一下为什么会有这篇文章.前段时间,插件化以及热修复的技术非常热,Nuwa热修复的工具NuwaGradle,携程动态载入技术DynamicAPK,还有希望做最轻巧的插件化框架的Small. ...

  2. Android 热修复Nuwa的原理及Gradle插件源码解析

    现在,热修复的具体实现方案开源的也有很多,原理也大同小异,本篇文章以Nuwa为例,深入剖析.  Nuwa的github地址 https://github.com/jasonross/Nuwa 以及用于 ...

  3. Android官方技术文档翻译——Gradle 插件用户指南(1-3)

    不知道是什么网络问题,上午一直发不了博客,其它页面基本正常,就是在写博客这里,每次打开都是响应超时.刚才用了VPN,顺便试了一下,竟然能够编辑.想是CDN之类的问题吧. 这次翻译的是Gradle 插件 ...

  4. Android官方技术文档翻译——Gradle 插件用户指南(5)

    昨晚把第五章未译完的几句话攻克了.只是第六章没怎么译,明后天又是周末,假设周一前第六章翻译完的话,周一再发第六章. 本文译自Android官方技术文档<Gradle Plugin User Gu ...

  5. Android官方技术文档翻译——Gradle 插件用户指南(4)

    最近赶项目,白天基本没时间,只有晚上在家的时候才能看一看.昨天晚上只翻译完了第四章,今天就只发第四章吧. 本文译自Android官方技术文档<Gradle Plugin User Guide&g ...

  6. Android官方技术文档翻译——Gradle 插件用户指南(7)

    本文译自Android官方技术文档<Gradle Plugin User Guide>,原文地址:http://tools.android.com/tech-docs/new-build- ...

  7. Android官方技术文档翻译——Gradle 插件用户指南(6)

    没想到翻译这篇<Gradle 插件用户指南>拖了差不多一个月,还跨年了.不过还好,在2号时终于一口气把剩下的给翻译完了(其实那天剩下的也就不到一章). 今天先发一下第六章,明天再发第七章. ...

  8. Android Gradle 学习笔记(七):Android Gradle 插件

    我们知道Android Gradle其实就是一个Gradle的一个第三方插件,它是由Google的Android团队开发的,基于Gradle构建的,和Android Studio完美搭配.相比于旧的构 ...

  9. Gradle的构建过程都不会?带你全面了解Android如何自定义Gradle 插件

    目前 Android 工程的默认构建工具为 Gradle,我们在构建 APK 的时候往往会执行 ./gradlew assembleDebug 这样的命令.. 那么这个命令到底代表着什么含义呢?命令的 ...

随机推荐

  1. git命令(使用visual studio)

    拉取,提取,合并 提交到本地 切换分支 创建分支 推送到远端 删除本地分支 删除远程分支

  2. 去BAT,你应该要看一看的面试经验总结

    我去年12月份从上一家公司离职,一直到今年3月份,基本上都在面试中度过来的. 先交代下背景:坐标上海,做技术开发,我本人面试的职位是linux服务器开发,最倾向的职位是服务器开发主程或技术经理.我本人 ...

  3. Ubuntu下压缩与解压各种文件的命令

    1.压缩与解压xz文件 (1)压缩 xz -z  filename (2)解压 xz -d  filename.xz 2.压缩与解压tar文件 (1)压缩 tar -cvf  filename(压缩到 ...

  4. Melancholy(磨懒虫主义)

    题目大意:给出n个地点和q个询问.其中每个地点有距离和权值,每个询问给出l,r,k,表示在[l,r]区间内不取最小点的情况下任取k个,求所有情况权值之积之和(n,q<=1e5,k<=6). ...

  5. TeeChart Pro VCL/FMX教程之使用函数

    函数类型 函数特点 TeeChart Pro功能是一个系列,几乎可以是任何系列类型,应用代数函数,数据源是另一个图表系列. 所有函数都派生自TTeeFunction组件并继承TeeFunction的P ...

  6. 洛谷2016 战略游戏 (0/1状态的普通树形Dp)

    题意: 给出一个树,覆盖树上某一个点的花费为w[i],求树上每一条边至少有一个点覆盖的最小花费. 细节: 1.一条边的两端可以均被覆盖,但是不能存在一条边的两端都不被覆盖. 2.可能存在 分析: 对于 ...

  7. C#中如何使用正则表达式

    [草稿版本,谨慎阅读] 参考文档:正则表达式30分钟入门教程 如需系统学习正则表达式内容,请移步上述教程. 正则表达式按照指定的规则来匹配字符或字符串.'.' ' \b' ' \d'等等被称为是正则表 ...

  8. LayUI分页基于ASP.NET MVC

    ---恢复内容开始--- 今天写了挺久的分页,百度了很多都没有很好的.Net实例,今天我来更新一期关于layuiTable分页 首先你得理解layui的官方文档的Table分页部分,我在这里附上地址 ...

  9. win7 如何将python加入环境变量

    我的电脑->右键属性->高级->系统变量 path里加上安装路径,比如 ";C:\Python26;" 请加分号附在其他path后面而不是直接覆盖.

  10. BestCoder Round #79 (div.2)-jrMz and angles,,暴力求解~

    jrMz and angle       Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 65536/65536 K (Java/Other ...