自定义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"
}
}