自己定义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.customimport org.gradle.api.Pluginimport org.gradle.api.Projectpublic class CustomPlugin implements Plugin{ 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仓库
- 本身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" } }