自己定义Gradle插件之"Hello World"
自己定义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类(可选)
- 改动
CustomPlugin
类
project.task('hello',Type: HelloTask)
- 加入一个
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插件之"Hello World"的更多相关文章
- 怎样使用Android Studio开发Gradle插件
缘由 首先说明一下为什么会有这篇文章.前段时间,插件化以及热修复的技术非常热,Nuwa热修复的工具NuwaGradle,携程动态载入技术DynamicAPK,还有希望做最轻巧的插件化框架的Small. ...
- Android 热修复Nuwa的原理及Gradle插件源码解析
现在,热修复的具体实现方案开源的也有很多,原理也大同小异,本篇文章以Nuwa为例,深入剖析. Nuwa的github地址 https://github.com/jasonross/Nuwa 以及用于 ...
- Android官方技术文档翻译——Gradle 插件用户指南(1-3)
不知道是什么网络问题,上午一直发不了博客,其它页面基本正常,就是在写博客这里,每次打开都是响应超时.刚才用了VPN,顺便试了一下,竟然能够编辑.想是CDN之类的问题吧. 这次翻译的是Gradle 插件 ...
- Android官方技术文档翻译——Gradle 插件用户指南(5)
昨晚把第五章未译完的几句话攻克了.只是第六章没怎么译,明后天又是周末,假设周一前第六章翻译完的话,周一再发第六章. 本文译自Android官方技术文档<Gradle Plugin User Gu ...
- Android官方技术文档翻译——Gradle 插件用户指南(4)
最近赶项目,白天基本没时间,只有晚上在家的时候才能看一看.昨天晚上只翻译完了第四章,今天就只发第四章吧. 本文译自Android官方技术文档<Gradle Plugin User Guide&g ...
- Android官方技术文档翻译——Gradle 插件用户指南(7)
本文译自Android官方技术文档<Gradle Plugin User Guide>,原文地址:http://tools.android.com/tech-docs/new-build- ...
- Android官方技术文档翻译——Gradle 插件用户指南(6)
没想到翻译这篇<Gradle 插件用户指南>拖了差不多一个月,还跨年了.不过还好,在2号时终于一口气把剩下的给翻译完了(其实那天剩下的也就不到一章). 今天先发一下第六章,明天再发第七章. ...
- Android Gradle 学习笔记(七):Android Gradle 插件
我们知道Android Gradle其实就是一个Gradle的一个第三方插件,它是由Google的Android团队开发的,基于Gradle构建的,和Android Studio完美搭配.相比于旧的构 ...
- Gradle的构建过程都不会?带你全面了解Android如何自定义Gradle 插件
目前 Android 工程的默认构建工具为 Gradle,我们在构建 APK 的时候往往会执行 ./gradlew assembleDebug 这样的命令.. 那么这个命令到底代表着什么含义呢?命令的 ...
随机推荐
- luogu 2709小b的询问--莫队
https://www.luogu.org/problemnew/show/P2709 无修改的莫队几乎没有什么太高深的套路,比较模板吧,大多都是在那两个函数上动手脚. 这题询问每一种数字数量的平方和 ...
- luogu P2078 朋友
题目背景 小明在A公司工作,小红在B公司工作. 题目描述 这两个公司的员工有一个特点:一个公司的员工都是同性. A公司有N名员工,其中有P对朋友关系.B公司有M名员工,其中有Q对朋友关系.朋友的朋友一 ...
- Linux硬盘的检测--smartctl详细介绍
概述 随着硬盘容量.速度的快速发展,硬盘的可靠性问题越来越重要,今天的单块硬盘存储容量可轻松达到1TB,硬盘损坏带来的影响非常巨大.不同的文件系统(xfs,reiserfs,ext3)都有自己的检测 ...
- IDEA中远程Debug调试
一.设置JVM支持远程Debug调式 由于我的应用是springboot, 所以直接使用java -jar的方法将服务启动起来. java -Xdebug -Xrunjdwp:transport=dt ...
- 「问题思考」python的递归中return返回none
代码: #求最大公约数 def gcd(x,y): if x < y: swap = x x = y y = swap if x%y == 0: return y else: gcd(y,x%y ...
- 安装完Centos 7后的一些处理
1.安装dkms:dkms-2.2.0.3-31.1.noarch.rpm 2.安装显卡驱动:amdgpu-pro-18.10-572953 3.启动图形界面使用init 5 不能使用startx
- 【BZOJ 2761】 不重复数字 (哈希算法)
链接 http://www.lydsy.com/JudgeOnline/problem.php?id=2761 Description 给出N个数,要求把其中重复的去掉,只保留第一次出现的数. 例如, ...
- Jedis 工具类
package com.pig4cloud.pigx.admin.utils; import redis.clients.jedis.*; import java.util.ArrayList; im ...
- python024 Python3 实例
Python3 实例 以下实例在 Python3.4.3 版本下测试通过: Python Hello World 实例 Python 数字求和 Python 平方根 Python 二次方程 Pytho ...
- left join 与left outer join的区别
joinn 语句有三种:inner join, left outer join 和 right outer join都可以简写,分别为join,left join,right join.