美文网首页
gradle plugin开发(一)

gradle plugin开发(一)

作者: yin_xin | 来源:发表于2023-02-19 22:30 被阅读0次

    创建工程

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

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


      image.png
    2. 创建插件入口类
    class MyPlugin : Plugin<Project> {
        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开发(一)

          本文链接:https://www.haomeiwen.com/subject/nclwkdtx.html