使用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】

后言:

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

相关推荐
寻星探路11 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
曹牧13 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
爬山算法14 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty72514 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎14 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄14 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
忆~遂愿15 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
小韩学长yyds15 小时前
Java序列化避坑指南:明确这4种场景,再也不盲目实现Serializable
java·序列化
仟濹15 小时前
【Java基础】多态 | 打卡day2
java·开发语言