美文网首页
自定义Gradle插件

自定义Gradle插件

作者: SunnyDay_ab5f | 来源:发表于2023-05-30 20:29 被阅读0次

一、什么是Gradle插件?

Gradle 和 Gradle 插件是两个完全不同的概念,Gradle 提供的是一套核心的构建机制,而 Gradle 插件则是运行在这套机制上的一些具体构建逻辑,例如我们常见的gradle插件就是:

plugins {
    id 'com.android.application'
}

'com.android.application'便是Android提供的用于构建APK的一个gradle插件。Gradle 插件打包了可重用的构建逻辑片段,可以在许多不同的项目和构建中使用。Gradle 允许您实现自己的插件,因此您可以重用您的构建逻辑,并与他人共享。

二、实现Gradle插件的3种方式

  • Build script脚本
    把插件写在build.gradle文件中,一般用于简单的逻辑,只在该build.gradle文件中可见。
  • buildSrc项目
    将插件源代码放在buildSrc/src/main/中,只对该项目可见。
  • 独立项目
    一个独立的java项目/模块,可以将文件包发布到仓库(Jcenter或本地仓库),对所有工程可见。

本文只对第三种方式的gradle插件进行说明,其他方式可以参考文章:Android Gradle插件开发基础

三、独立项目gradle插件的实现

(1)创建一个javalib

注意选择 java or kotlin library

image.png
这里我把这个javalib命名为test_plugin工程目录如下图: image.png

(2)test_plugin中的build.gradle编写

1.使用java-gradle-plugin插件的方式

plugins {
    id 'maven-publish'
    id 'java-gradle-plugin'
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}

gradlePlugin {
    plugins {
        standaloneGradlePlugins {
            id = 'test_plugin'
            implementationClass = 'com.example.test_plugin.MyPlugin'
        }
    }
}



publishing {
    repositories {
        maven {
            // $rootDir 表示你项目的根目录
            // 这里配置发布到的本地目录
            url = "$rootDir/repo"
        }
    }

    publications {
        maven(MavenPublication) {

            // 插件的组ID,建议设置为插件的包名
            groupId = 'com.example.test_plugin'
            // 插件的名字,后续在引用时会用到
            artifactId = 'MyPlugin'
            version = '1.0.0'
            // 组件类型
            from components.java
        }
    }
}



2.不适用java-gradle-plugin插件的方式

plugins {
    id 'maven-publish'
    id 'groovy'
}


java {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}


dependencies {
    implementation gradleApi()
}

publishing {
    publications {
        maven(MavenPublication) {
            groupId = 'ccom.example.test_plugin'
            artifactId = 'MyPlugin'
            version = '1.0.0'
            from components.java
        }
    }

    repositories {
        maven {
            // change to point to your repo, e.g. http://my.org/repo
            url = layout.buildDirectory.dir('repo')
        }
    }
}

不使用java-gradle-plugin就必须添加 id 'groovy支持,依赖implementation gradleApi()并且需要在resources目录下创建META-INF目录,并在META-INF中创建test_plugin.properties文件。

image.png
文件内容为: image.png
如果是1.使用java-gradle-plugin插件的方式的话这个文件可以不用创建,使用图片中的红框内容即可代替
image.png

像Arutor框架中的插件使用的是maven


image.png

由于我们的gradle版本是7.1的所以已经不支持maven了,谷歌推荐我们使用id 'maven-publish'

image.png

这里还要注意一个问题settings.gralde文件中的dependencyResolutionManagement中的RepositoriesMode.FAIL_ON_PROJECT_REPOS要改为RepositoriesMode.PREFER_PROJECT不然会报错。

image.png

(3)、plugin文件实现

在src/mian/目录下创建java目录然后创建自己的包名目录,最后创建自己的MyPlugin文件。


image.png

MyPlugin文件实现了Plugin<Project>并覆写了apply方法。我们在方法中输出一个打印。

(4)、上传插件到本地仓库

点击sync按钮后在窗口右侧点击publish或publishToMavenLocal


image.png

publishToMavenLocal会在用户目录的.m2文件夹中生成插件

image.png

publish会在gradle文件中指定的路径中生成插件,我们指定的是根目录的repo目录中

image.png image.png

(5)引用插件

新建一个项目并在project的build.gradle中添加path

image.png

在app的build.gradle中引用插件


image.png

这里由于使用的是本地仓库需要在setting.gradle添加本地仓库

image.png

点击sync按钮可以看到我们自定义插件的打印

image.png

相关文章

  • Gradle自定义插件

    Gradle自定义插件 在Gradle中创建自定义插件,Gradle提供了三种方式: 在build.gradle脚...

  • 自定义Gradle插件

    个人博客http://www.milovetingting.cn 自定义Gradle插件 自定义Gradle插件可...

  • 启用Gradle远程调试

    在Gradle学习10——自定义Gradle插件 这篇文章中介绍了编写插件的几种方式。编写gradle对象插件的实...

  • gradle插件调试

    在Gradle学习10——自定义Gradle插件 这篇文章中介绍了编写插件的几种方式。编写gradle对象插件的实...

  • Android Gradle 插件(二)

    Android Gradle 插件(一)Android Plugin DSL Reference 自定义插件 新建...

  • Gradle 插件

    比如一个自动输出Lint报告的Gradle插件1.自定义Gradle插件的方式Gradle是采用Groovy语言,...

  • Gradle自定义插件和发布

    Gradle自定义插件和发布 这篇文章讲解的是如何自定义gradle插件,并以本地依赖和远程依赖的方式来集成。 本...

  • Android Gradle入门到精通(二)

    1.背景 上节学完了Gradle的基础知识,这节学习下Gradle的自定义插件。自定义插件主要分为三种方式: 新建...

  • Gradle自定义插件(Android)

    Gradle插件使用在日常开发中已经很熟悉,那么我们怎么去自定义我们的插件? 自定义插件 自定义插件基于源码放置可...

  • EventTrackingAndroidGradle

    一个基于 Android Gradle 的自定义插件。

网友评论

      本文标题:自定义Gradle插件

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