項(xiàng)目中引入自定義Gradle plugin一般有三種方法:
- 直接寫在 build.gradle中
- plugin源碼放到buildSrc/src/main/groovy目錄下
- plugin打包成jar, 發(fā)布到maven倉庫, 然后項(xiàng)目通過Build Script依賴jar的形式引入
一甫匹、直接寫在 build.gradle中
這個(gè)最簡單直接,以它為入口先介紹Plugin的玩法。
app build.gradle中
//應(yīng)用插件 這里注意直接寫類纵菌,不用加引號菱阵。
apply plugin: TestPlugin
//創(chuàng)建插件類颁褂,覆寫apply方法(執(zhí)行調(diào)用點(diǎn))
class TestPlugin implements Plugin<Project>{
@Override
void apply(Project target) {
println ‘hello plugin!'
}
}
Plugin它本質(zhì)上是對完成特定功能的task的封裝席里,因此業(yè)務(wù)功能會交給task來處理签则。
加上Extension和task:
/**
* 插件拓展:為plugin配置各種參數(shù)遥诉,提供應(yīng)用程序與Plugin通信
* 也相當(dāng)于project的ext{}拇泣,不過這個(gè)是封裝在plugin部分。
* project的ext{}更適合配置全局common的東西
*/
class TestExtension {
String msg
}
testExtension.msg = "自定義插件拓展"
class TestPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
//創(chuàng)建Extension類矮锈,key-value的形式霉翔,外部可使用key的閉包傳遞信息
def test = project.extensions.create('testExtension', TestExtension)
//依托在build task之后執(zhí)行
project.getTasks().getByName('build') {
doLast {
println test.msg
}
}
}
}
二、buildSrc方式
新建buildSrc空文件夾苞笨,這個(gè)目錄默認(rèn)就用來存放自定義插件债朵。重點(diǎn)就是main部分:plugin是.groovy文件格式,resources文件夾也按如圖命名方式瀑凝。test-plugin.properties后者前的名字部分是插件名序芦。
build.gradle配置:
apply plugin: 'groovy'
dependencies {
implementation gradleApi()
implementation localGroovy()
}
repositories {
jcenter()
}
sourceSets {
main {
groovy {
srcDir 'src/main/groovy'
}
resources {
srcDir 'src/main/resources'
}
}
}
TestPlugin.groovy:
package com.stan.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
class TestPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
println 'test plugin!!!'
}
}
test-plugin.properties
implementation-class=com.stan.plugin.TestPlugin
app或者其他用到插件的module build.gradle中引入插件
apply plugin: 'test-plugin’
三、plugin打包成jar, 發(fā)布到本地或者遠(yuǎn)程maven倉庫
創(chuàng)建android module粤咪,保留與buildSrc一致的目錄結(jié)果谚中,多余的刪除。
功能完成后,執(zhí)行build task宪塔,在build/libs目錄下會生成.jar文件
在buildSrc的基礎(chǔ)上磁奖,調(diào)整build.gradle
//添加maven plugin, 用于發(fā)布我們的jar
apply plugin: 'maven'
repositories {
mavenCentral()
}
//設(shè)置maven deployer
uploadArchives {
repositories {
mavenDeployer {
//設(shè)置插件的GAV參數(shù)
pom.groupId = 'com.stan.plugin'
pom.artifactId = ‘my-plugin'
pom.version = 1.0
//文件發(fā)布到下面目錄
repository(url: uri('../release'))
}
}
}
運(yùn)行uploadArchives task,就能在設(shè)置的倉庫路徑中生成 my-plugin了
最后在app或者其他module build.gradle引入
apply plugin: 'my-plugin'
buildscript {
repositories {
maven {
//my-plugin 所在的倉庫
//這里是發(fā)布在本地文件夾了
url uri('../release')
}
}
dependencies {
//引入my-plugin
classpath 'com.stan.plugin:my-plugin:1.0'
}
}
這里注意:module名蝌麸、插件名点寥、pom.artifactId保持一致,不然容易報(bào):Plugin with id ‘XXX' not found.