- Gradle 之Groovy基本语法(一)
- Gradle 之Groovy文件操作(二)
- Gradle 之详解Project(三)
- Gradle 之详解Task(四)
- Gradle 之初识插件(五)
- Gradle 之常用配置(六)
- Gradle 之扩展Extension类 (七)
一、初识插件
Android Plugin可以将我们写好的Task等以插件的形式封装在一起,这样通过就可以将插件发布到插件,别人直接引入该插件就可以使用里面的内容。
二、搭建本地Maven
使用AndroidStudio工具可以编写Android插件,目前我知道有两种方式:
- 1、使用固定的模块名称buildSrc,可以正常的引用插件
- 2、使用uploadArchives任务,将插件上传到仓库中。使用的时候从仓库中拉取即可
1)、配置Maven仓库
1、下载apache-maven-XXX.zip
第一步下载apache-maven-3.6.0-bin.zip文件到本地解压
2、配置环境变量
同jdk等配置一样,配置;%MAVEN_HOME%\bin;到path中。
在控制台输入mvn -v,有如下提示则成功。
3、配置setting.xml(可选)
打开\conf\setting.xml,这里面可设置仓库的位置。
我的仓库位置如下
<localRepository>D:\F\maven_repository</localRepository>
再在控制台输入;mvn help:system命令,如果该位置下下载了一些文件,这说明成功了
2)、搭建Maven服务器
Nexus是用来管理Maven的服务器
1、下载Nexus
在官网中下载对应的文件,我这里下载的是nexus-3.15.2-01-win64.zip。
2、开启服务
解压下载的压缩包,并用cmd找到里面的bin目录后,再执行nexus /run命令,正常情况下不出错,即成功
3、管理Maven
打开http://localhost:8081网址,再点击右上方的sign in,初始化用户名和密码分别是admin和admin123
打开Browse后,右边的就是仓库地址,如http://127.0.0.1:8081/repository/maven-releases/
到这里服务器和仓库已经处理完成了
三、AS编写插件
1)、构建library
构建Android模块,去除额外的文件,按照下图所示,编写如下文件。
- build.gradle : 代表着脚本
- src/main/groovy : 存放代码目录,因为是groovy代码,所以是groovy目录,而不是java目录
- src/main/resources : 存放资源的目录,该目录下再构建两个子目录META-INF和gradle-plugins,这两个是默认的目录
2)编写插件代码
在groovy目录下面编写个com.phj.firstplugin.PluginImpl类
简单代码如下:
package com.phj.firstplugin
import org.gradle.api.Plugin
import org.gradle.api.Project
class PluginImpl implements Plugin<Project> {
void apply(Project project) {
println "PluginImpl ${project.name}"
def task = project.tasks.findByName('build')
if (task != null) {
task.doLast {
println "Hello gradle plugin"
}
}
}
}
该PluginImpl类是继承自Plugin<Project>类的,会重写apply(Project project)。这里面的project对象就是我们引用该插件的project。即得到了该project对象,我们可以通过Project对象做些自定义的事情。
该apply方法做了两件事:
- 打印project的名字
- 找到project中的build这个Task,在build中插入一段代码,即打印一句话。
2)、编写映射文件
我们写好了groovy代码,那我们通过怎样的方式,才能让该类执行了。也就有了先设置好映射关系,我们本身的脚本使用后,就能映射到该插件类。
这里定义文件名是com.phj.firstplugin.properties,即该插件的名字是com.phj.firstplugin,文件的内容:
// 执行插件类的位置
implementation-class=com.phj.firstplugin.PluginImpl
这里很好解释:首先用户通过gradle-plugins下找到文件名com.phj.firstplugin,在文件下读取key为implementation-class的value值,这个就是该插件的类名。
3)、编写build.gradle,并上传到本地仓库
apply plugin: 'groovy'
apply plugin: 'maven'
dependencies {
compile gradleApi()
compile localGroovy()
}
repositories {
mavenCentral()
}
uploadArchives {
repositories {
mavenDeployer {
pom.groupId = 'com.phj.firstplugin'
pom.artifactId = 'test'
pom.version = '1.0.0'
//文件发布到下面目录
repository(url: uri('http://127.0.0.1:8081/repository/maven-releases/')) {
authentication(userName: 'admin', password: 'admin123') // maven授权信息
}
}
}
}
脚本完成了两件事:
- 引入maven和groovy插件
- 编写uploadArchives任务,用于上传到本地仓库
pom.groupId等就是引入的时候所一一对应的。
repository中uri是上传的路径,authentication为maven服务器的用户名和密码
执行gradlew uploadArchives任务,结束后就会上传到本地的仓库。服务器管理界面可以看到上传后的文件:
4)、使用插件
使用:插件
- app 模块下引入
apply plugin: 'com.phj.firstplugin'
- root下的build.gradle引入插件
dependencies {
classpath 'com.phj.firstplugin:test:1.0.0'
}
compile后面的参数就是pom.groupId等组合起来的,用于判断是哪个版本
- 执行gradlew build
Project的配置阶段会输出:PluginImpl app
Project的执行阶段,执行到build这个task时会打印:Hello gradle plugin