gradle plugin开发(一)

创建工程

使用android studio,基于gradle api 7.0+
点击查看官方文档

  1. 创建java library工程,删除多余文件,保留build.gradle,如图。


    image.png
  2. 创建插件入口类
class MyPlugin : Plugin {
    override fun apply(project: Project) {
      println("Hello MyPlugin")
    }
}
  1. 编写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发布有以下几点不同。

  1. 每个插件会创建一个marker发布任务。官方文档说明
  2. 插件工程包含一个名为pluginMaven的主发布任务。

所以发布一个插件需要执行对应的marker任务+ pluginMaven主发布任务,如果有2个任务则需要执行2个marker任务和pluginMaven任务,或者直接执行publish聚合发布即可。

使用

  1. 在使用的工程导入对应的仓库地址
  2. 使用插件版本
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
}

你可能感兴趣的:(gradle plugin开发(一))