nkwangjie 2019-06-28
目前的开发工具主要是在Android Studio上,对这个工具真的是又恨又爱,只能收希望它越来越好。
这几天,一直在看Gradle插件的相关的东西,希望将自己的这些学习成长的经历记录下来。由易到难,开发一个自己的插件。
准备工作
<!-- 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本地仓库,怎么上传远程仓库,可以参考我的另外一篇拙作:开源自己的项目到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使用。