1.插件類型
Gradle的插件分為兩種類型:腳本插件(script plugins)和二進制插件(binary plugins)。
腳本插件就是額外的構(gòu)建腳本嘲更,腳本插件通常用來對構(gòu)建過程進行深度配置梳侨,同樣遵循聲明式的思想舅世。腳本插件常常作為另一個腳本文件(即*.gradle) 文件被放置在項目目錄中农尖,以本地文件的形式應用插件荒揣。
二進制插件就是實現(xiàn)了Plugin接口的類,可以用java画机、kotlin和groovy編寫冶伞,更容易進行測試,還可以被打包成jar包共享出去步氏。
2.Gradle插件的三種實現(xiàn)方式
1.腳本插件
直接在build.gradle中編寫一個實現(xiàn)了org.gradle.api.plugins接口的類响禽, 這個類就是一個插件。
2.在buildSrc中編寫插件類
Gradle提供了一種在現(xiàn)有項目中編寫二進制插件的方法荚醒,在項目根目錄下創(chuàng)建 buildSrc 文件芋类,并遵循相關規(guī)范。
Gradle會自動編譯這些目錄下的插件界阁,并且將它們解析侯繁,使得在項目的所有構(gòu)建腳本中都可以應用這些目錄下的插件。
3.獨立項目
單獨建立一個項目泡躯,打包成一個jar包贮竟,實現(xiàn)復用。
3.自定義插件
網(wǎng)上能找到的示例都是基于Gradle6.0之前版本的较剃,本文中使用的是官方文檔的最新示例咕别。
項目結(jié)構(gòu):
Project:
----app
--------build.gradle
----library
--------build.gradle
----plugin
--------src/main/java/
--------build.gradle
----build.gradle
----settings.gradle
1.在項目根目錄創(chuàng)建一個新目錄,在新目錄下創(chuàng)建代碼目錄及build.gradle文件重付。
plugins {
id 'java-gradle-plugin' //Gradle開發(fā)插件
id 'kotlin' //使用Kotlin
id 'maven-publish' //插件發(fā)布
}
dependencies {
implementation "com.android.tools.build:gradle:4.2.1" //使用com.android.build.api
}
gradlePlugin {
plugins {
MethodTracer {
id = 'com.example.plugin' //定義插件id
implementationClass = 'com.example.plugin.CustomPlugin' //定義插件實現(xiàn)類
}
}
}
publishing {
// 定義發(fā)布什么
publications {
plugin(MavenPublication) {
groupId = 'com.example' //這三部分組成了:com.example:plugin:1.0.0-SNAPSHOT
artifactId = 'plugin'
version = '1.0.0-SNAPSHOT'
from components.java //使用默認的配置生成jar包
}
}
// 定義發(fā)布到哪
// publishPluginPublicationToRepoRepository 發(fā)布到 plugin/build/repo
// publishPluginPublicationToMavenLocal 發(fā)布到 ~/.m2/repository
repositories {
maven {
name = 'repo'
url = layout.buildDirectory.dir("repo")
}
}
}
2.在項目根目錄的settings.gradle中添加:include ':plugin'
3.在項目根目錄的build.gradle中添加本地依賴:
buildscript {
repositories {
mavenLocal()
}
dependencies {
classpath 'com.example:plugin:1.0.0-SNAPSHOT'
}
}
4.在app目錄的build.gradle使用插件:apply plugin: 'com.example.plugin'
5.發(fā)布插件:./gradlew publishToMavenLocal
參考文檔: