創(chuàng)建工程
使用android studio假残,基于gradle api 7.0+
點(diǎn)擊查看官方文檔
-
創(chuàng)建java library工程阀湿,刪除多余文件,保留build.gradle,如圖铣口。
- 創(chuàng)建插件入口類
class MyPlugin : Plugin<Project> {
override fun apply(project: Project) {
println("Hello MyPlugin")
}
}
- 編寫gradle文件
plugins {
//開發(fā)gradle插件所需基礎(chǔ)插件笔呀,該插件會(huì)自動(dòng)導(dǎo)入java插件
id 'java-gradle-plugin'
//我使用kotlin語言開發(fā),如果使用其他語言導(dǎo)入相應(yīng)插件
id 'org.jetbrains.kotlin.jvm'
}
gradlePlugin {
plugins {
//插件1
myPlugin1 {
//插件id命名規(guī)則為groupId+插件名
id = "com.xx.myPlugin1"
//插件入口,等效于resources/META-INF/gradle-plugins方式
implementationClass = 'com.example.libplugin.MyPlugin'
}
//插件2
myPlugin1 {
id = "com.xx.myPlugin2"
implementationClass = 'com.example.libplugin.MyPlugin2'
}
}
}
dependencies {
//相關(guān)依賴
}
java-gradle-plugin
提供gradlePlugin閉包來聲明插件捏题,所以不需要我們在使用resources/META-INF/gradle-plugins
的方式去聲明玻褪。
發(fā)布插件
在build.gradle中添加Maven發(fā)布插件,以及相關(guān)配置
//build.gradle
plugins {
id 'java-gradle-plugin'
id 'org.jetbrains.kotlin.jvm'
//發(fā)布插件
id 'maven-publish'
}
gradlePlugin {
plugins {
//插件1
myPlugin1 {
//插件id命名規(guī)則為groupId+插件名
id = "com.xx.myPlugin1"
//插件入口,等效于resources/META-INF/gradle-plugins方式
implementationClass = 'com.example.libplugin.MyPlugin'
}
//插件2
myPlugin1 {
id = "com.xx.myPlugin2"
implementationClass = 'com.example.libplugin.MyPlugin2'
}
}
}
dependencies {
//...
}
//插件所在group公荧, 即groupId
group 'com.xxx.xxx'
//版本號
version '1.0.0'
publishing {
//倉庫
repositories {
maven {
name = 'myRepoName'
url = '倉庫地址'
//如果需要密碼認(rèn)證添加
credentials {
username = "xxx"
password = "xxxx"
}
}
}
}
gradle發(fā)布插件與普通jar包和aar發(fā)布有以下幾點(diǎn)不同带射。
- 每個(gè)插件會(huì)創(chuàng)建一個(gè)marker發(fā)布任務(wù)。官方文檔說明
- 插件工程包含一個(gè)名為
pluginMaven
的主發(fā)布任務(wù)循狰。
所以發(fā)布一個(gè)插件需要執(zhí)行對應(yīng)的marker
任務(wù)+ pluginMaven
主發(fā)布任務(wù)窟社,如果有2個(gè)任務(wù)則需要執(zhí)行2個(gè)marker任務(wù)和pluginMaven任務(wù),或者直接執(zhí)行publish
聚合發(fā)布即可绪钥。
使用
- 在使用的工程導(dǎo)入對應(yīng)的倉庫地址
- 使用插件版本
plugins {
id 'com.android.application' version '7.2.2' apply false
id 'com.android.library' version '7.2.2' apply false
id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
id 'org.jetbrains.kotlin.jvm' version '1.7.10' apply false
//插件id
id 'com.xx.myPlugin1' version '1.0.0' apply false
}