创建工程
使用android studio,基于gradle api 7.0+
点击查看官方文档
-
创建java library工程,删除多余文件,保留build.gradle,如图。
- 创建插件入口类
class MyPlugin : Plugin<Project> {
override fun apply(project: Project) {
println("Hello MyPlugin")
}
}
- 编写gradle文件
plugins {
//开发gradle插件所需基础插件,该插件会自动导入java插件
id 'java-gradle-plugin'
//我使用kotlin语言开发,如果使用其他语言导入相应插件
id 'org.jetbrains.kotlin.jvm'
}
gradlePlugin {
plugins {
//插件1
myPlugin1 {
//插件id命名规则为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 {
//相关依赖
}
java-gradle-plugin
提供gradlePlugin闭包来声明插件,所以不需要我们在使用resources/META-INF/gradle-plugins
的方式去声明。
发布插件
在build.gradle中添加Maven发布插件,以及相关配置
//build.gradle
plugins {
id 'java-gradle-plugin'
id 'org.jetbrains.kotlin.jvm'
//发布插件
id 'maven-publish'
}
gradlePlugin {
plugins {
//插件1
myPlugin1 {
//插件id命名规则为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 = '仓库地址'
//如果需要密码认证添加
credentials {
username = "xxx"
password = "xxxx"
}
}
}
}
gradle发布插件与普通jar包和aar发布有以下几点不同。
- 每个插件会创建一个marker发布任务。官方文档说明
- 插件工程包含一个名为
pluginMaven
的主发布任务。
所以发布一个插件需要执行对应的marker
任务+ pluginMaven
主发布任务,如果有2个任务则需要执行2个marker任务和pluginMaven任务,或者直接执行publish
聚合发布即可。
使用
- 在使用的工程导入对应的仓库地址
- 使用插件版本
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
}