使用IntelliJ IDEA开发Gradle插件并发布到本地

博主所用软件版本为:

IntelliJ IDEA 2024.1.4 (Community Edition)

Android Studio Ladybug Feature Drop | 2024.2.2 Beta 1

1、制作gradle插件(IntelliJ IDEA 2024.1.4)

新建groovy工程,File-->New-->Project...

右键点击包名,New-->Groovy Script

输入插件实现类名称

添加gradle依赖,不然无法使用gradle API

编写插件实现代码

groovy 复制代码
package com.example.hello

import org.gradle.api.Plugin
import org.gradle.api.Project

class HelloPlugin implements Plugin<Project> {

    @Override
    void apply(Project target) {
        println('good good study, day day up!')
    }
}

创建插件id描述文件hello-gradle-plugin.properties

groovy 复制代码
# 当前文件名为插件引用时的id
# plugins {
#    id 'hello-gradle-plugin'
# }
implementation-class=com.example.hello.HelloPlugin

注意:文件名为插件引用时的id

删除用不到的文件Main.groovy文件、java目录、test目录(可选操作)

2、发布插件到本地

添加maven-publish插件并点击右上角Load Gradle Change按钮同步

groovy 复制代码
plugins {
    id 'maven-publish'
}

添加maven自定义发布配置信息

groovy 复制代码
//当前文件中添加 plugins { id 'maven-publish' } 后下面的内容会在输入过程中自动补全
publishing {
    publications {
        create('HelloPlugin', MavenPublication.class, new Action<MavenPublication>() {
            @Override
            void execute(MavenPublication u) {
                //依赖引用示例:implementation 'com.example.hello:HelloPlugin:1.0.0'
                u.groupId = 'com.example.hello'
                u.artifactId = 'HelloPlugin'
                u.version = '1.0.0'
                //方式一,添加产物
                u.from(components['java'] as SoftwareComponent)
                //方式二,添加产物
                u.artifact("build/outputs/aar/replugin-host-lib-debug.aar")
                u.artifact(androidJavadocJar)
                u.artifact(androidSourcesJar)
            }
        })
    }
    //定义本地maven发布仓位置
    repositories {
        maven {
            name  'repo'
            url './repo'
        }
    }
}

编译gradle插件并发布到本地repo maven仓库

3、引用Gradle插件(Android Studio Ladybug)

在文件settings.gradle中定义maven仓位置

groovy 复制代码
pluginManagement {
    repositories {
        maven {
            //自定义gradle插件生成文件夹
            url uri('C:\\Users\\lj0015274\\IdeaProjects\\HelloGradlePlugin\\repo')
        }
    }
}

文件build.gradle文件中添加插件声明

groovy 复制代码
plugins {
    id 'com.example.hello.HelloPlugin' apply false
}

添加插件依赖自定义解析策略

groovy 复制代码
pluginManagement {
    resolutionStrategy {
        eachPlugin {
            if (requested.id.id == 'com.example.hello.HelloPlugin') {
                useModule('com.example.hello:HelloPlugin:1.0.0')
            }
        }
    }
}

app模块中build.gradle里面添加插件引用

groovy 复制代码
plugins {
    //此处id为自定义插件工程中 hello-gradle-plugin.properties 的文件名
    id 'hello-gradle-plugin'
}

点击右上角大象按钮(Sync Project with Gradle Files)同步gradle项目

同步结果如下图,成功打印自定义gradle插件中的日志

参考资料:

如何使用Android Studio自定义Gradle插件【https://www.jianshu.com/p/92504554d727】

后言:

如果这篇文章有帮助到你,欢迎打赏,支持我的创作。

相关推荐
小光学长9 小时前
基于ssm的美妆产品推荐系统rah0h134(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·数据库·spring
Light609 小时前
破局“数据孤岛”:构建业务、财务、指标三位一体的智能数据模型
java·大数据·开发语言
中文很快乐9 小时前
从零到一:用 SpringBoot 打造 RESTful API 实战指南
java·spring boot·后端·restful
泉城老铁9 小时前
springboot+redis 如何实现订单的过期
java·后端·架构
哈哈哈笑什么10 小时前
在高并发分布式SpringCloud系统中,什么时候时候并行查询,提高查询接口效率,从10s到100ms
java·分布式·后端
IMPYLH10 小时前
Lua 的 warn 函数
java·开发语言·笔记·junit·lua
泉城老铁10 小时前
如何用Spring Boot实现分布式锁?
java·redis·后端
周杰伦_Jay10 小时前
【Java集合与线程池深度解析】底层原理+实战选型+避坑指南(附代码)
java·开发语言·python
老王头的笔记10 小时前
Spring支持的消费器模式,支持在当前事务提交、或回滚的前、后执行业务操作
java·windows·spring
代码or搬砖10 小时前
Java中操作Redis
java·开发语言·redis