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

后言:

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

相关推荐
喻米粒062224 分钟前
RabbitMQ消息相关
java·jvm·spring boot·spring·spring cloud·sentinel·java-rabbitmq
Aphelios3803 小时前
Java全栈面试宝典:线程机制与Spring IOC容器深度解析
java·开发语言·jvm·学习·rbac
qq_529835353 小时前
装饰器模式:如何用Java打扮一个对象?
java·开发语言·装饰器模式
日暮南城故里3 小时前
Java学习------源码解析之StringBuilder
java·开发语言·学习·源码
一个public的class6 小时前
什么是 Java 泛型
java·开发语言·后端
士别三日&&当刮目相看6 小时前
JAVA学习*Object类
java·开发语言·学习
快来卷java6 小时前
MySQL篇(一):慢查询定位及索引、B树相关知识详解
java·数据结构·b树·mysql·adb
凸头6 小时前
I/O多路复用 + Reactor和Proactor + 一致性哈希
java·哈希算法
慵懒学者7 小时前
15 网络编程:三要素(IP地址、端口、协议)、UDP通信实现和TCP通信实现 (黑马Java视频笔记)
java·网络·笔记·tcp/ip·udp
anda01097 小时前
11-leveldb compact原理和性能优化
java·开发语言·性能优化