目前的开发工具主要是在Android Studio上,对这个工具真的是又恨又爱,只能收希望它越来越好。
这几天,一直在看Gradle插件的相关的东西,希望将自己的这些学习成长的经历记录下来。由易到难,开发一个自己的插件。
准备工作
- Android Studio(建议3.0+)
- gradle 4.0+
<!-- more -->
我们需要开发一个能打印hello world
的gradle插件,看到hello world,是不是觉得凉凉了,哈哈,一个好的程序员都是从hello world开始的,千里之行始于足下。
我们希望希望开发一个简单的插件,就是打印一行:hello world。
先解释下,所以的gradle的插件,其实就是一个可以挂载在我们工作空间的一个工具,但我们运行我们的gradle脚本时,我们就可以运行我们的插件,这个插件是为我们做一些人工也可以替代的工作,甚至是多个task任务。
项目结构
我们先在我们的工作控件新建一个Android library项目plugin,仅保留src下的main其他的都删掉吧.
src/main下新建一个groovy和resources的文件夹。
其中groovy的文件用来存源码,resources存放静态资源和配置,build.gradle是我们的build环境。
先来看下build.gradle吧。
apply plugin: 'groovy'
dependencies {
//gradle sdk
compile gradleApi()
//groovy sdk
compile localGroovy()
}
repositories {
mavenCentral()
}
一个插件的主要工作其实是在src文件下,所以我们需要在src/main/groovy
下新建一个文件包名cc.cyning.plugin
,在这个包下新建一个MyPlugin.groovy
文件。
MyPlugin.groovy文件:
import org.gradle.api.Plugin
import org.gradle.api.Project
public class MyPlugin implements Plugin<Project> {
void apply(Project project) {
System.out.println("========================");
System.out.println("hello world");
System.out.println("========================");
}
}
在groovy下不是应该用groovy语言么?
其实用java也是ok的,对于不会groovy的同学用java肯定是可以的。
插件实现了org.gradle.api.Plugin
接口,我们需要实现apply
方法。
插件的工作完成,可是怎么标识MyPlugin
文件是插件的入口文件呢?
在src/main/resources
下我们需要定义一个properties
文件:
resources
└── META-INF
└── gradle-plugins
└── cyning.properties
cyning.property:
implementation-class=cc.cyning.plugin.MyPlugin
这样就是一个完整的插件项目的结构,groovy是我们的实现代码,·、resources/META-INF
配置插件的实现类。
插件使用
maven 本地仓库配置
为了插件的使用,我们需要引入maven本地仓库,怎么上传远程仓库,可以参考我的另外一篇拙作:开源自己的项目到JCenter,不过为了插架开发没必要这么麻烦。
若是你了解可以直接跳过本小节内容。
我们需要在build.gradle
下配置上传到本地的maven配置:
apply plugin: 'groovy'
apply plugin: 'maven'
......
group='cc.cyning.plugin'
version='1.0.0'
uploadArchives {
repositories {
mavenDeployer {
//提交到远程服务器:
// repository(url: "http://www.xxx.com/repos") {
// authentication(userName: "admin", password: "admin")
// }
//本地的Maven地址设置为在项目的maven文件下(提前新建mave这个文件夹)
repository(url: "file://${rootProject.projectDir}/maven")
}
}
}
使用./gradlew :plugin:uploadArchives
即可在项目下看到maven文件下产生了文件:
而我们的项目怎么用呢?
使用插件
上一步,我们已经生成maven插件,为了能让插件运行,我们需要导入这个gradle插件。
app的build.gradle
配置:
buildscript {
repositories {
maven {//本地Maven仓库地址 切记:三个斜杠,
url "file:///${rootProject.projectDir}/maven/"
}
}
dependencies {
//格式为-->group:module:version
classpath 'cc.cyning.plugin:plugin:1.0.0'
}
}
//cyning为resources/META-INF/gradle-plugins
//下的properties文件名称
apply plugin: 'cyning'
运行我们的插件:
>./gradlew :app:clean
> Configure project :app
========================
hello world
========================
小结
我们这节的目的就是能熟悉插件的卡法流程,尤其是开发插件和使用的各种配置,要对应上,properties的配置,以及gradle使用。