Kotlin版本实现Gradle插件

Kotlin版本实现Gradle插件

本文链接:https://blog.csdn.net/feather_wch/article/details/131746478

  • 创建一个Gradle项目,并选择Kotlin/JVM作为项目SDK。假设项目的名称为hello-plugin。
  • 在项目中创建一个新的源集,比如plugin,用于存放插件的源代码和资源。在src目录下创建一个plugin目录,并在其中创建一个kotlin目录和一个resources目录。
  • 在plugin源集中创建一个实现了Plugin接口的类,比如HelloPlugin。在src/plugin/kotlin/com/example目录下创建一个HelloPlugin.kt文件,内容如下:
kotlin 复制代码
package com.example

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.Exec

// 实现Plugin接口
class HelloPlugin : Plugin<Project> {

    // 重写apply方法
    override fun apply(project: Project) {
        // 在项目中添加一个hello任务,用于打印一句问候语
        project.tasks.register("hello", Exec::class.java) {
            it.commandLine("echo", "Hello from plugin!")
        }
    }
}
  • 在plugin源集中创建一个resources/META-INF/gradle-plugins目录,用于存放插件的属性文件。在该目录下创建一个hello.properties文件,内容如下:
properties 复制代码
# 指定插件类的全限定名
implementation-class=com.example.HelloPlugin
  • 在项目根目录下创建一个settings.gradle.kts文件,用于配置项目名称和版本号。内容如下:
kotlin 复制代码
// 配置项目名称
rootProject.name = "hello-plugin"
// 配置项目版本号
rootProject.version = "1.0.0"
  • 在项目根目录下创建一个build.gradle.kts文件,用于配置项目的构建逻辑。在这里,你需要添加一些依赖项,比如gradleApi()和kotlin("stdlib"),以及一些任务,比如jar和publishToMavenLocal。内容如下:
kotlin 复制代码
plugins {
    // 应用java插件
    java
    // 应用kotlin插件
    kotlin("jvm") version "1.6.0"
    // 应用maven-publish插件
    `maven-publish`
}

// 配置源集
sourceSets {
    // 获取plugin源集
    val plugin by getting {
        // 设置编译输出目录
        output.setClassesDirs(files("$buildDir/classes/plugin"))
        // 设置资源输出目录
        output.setResourcesDir("$buildDir/resources/plugin")
        // 设置编译输入目录
        java.srcDir("src/plugin/kotlin")
        // 设置资源输入目录
        resources.srcDir("src/plugin/resources")
    }
}

// 配置依赖项
dependencies {
    // 添加gradleApi依赖项,用于访问Gradle API
    implementation(gradleApi())
    // 添加kotlin标准库依赖项,用于编译Kotlin代码
    implementation(kotlin("stdlib"))
}

// 配置jar任务,用于打包插件类和资源为jar文件
tasks.jar {
    // 设置jar文件名为项目名称-版本号.jar,比如hello-plugin-1.0.0.jar
    archiveFileName.set("${project.name}-${project.version}.jar")
    // 设置jar文件所在目录为build/libs目录
    destinationDirectory.set(file("$buildDir/libs"))
    // 从plugin源集中获取类和资源,并添加到jar文件中
    from(sourceSets["plugin"].output)
}

// 配置publishing扩展,用于发布插件到Maven仓库
publishing {
    // 配置发布到本地Maven仓库的方式
    repositories {
        mavenLocal()
    }
    // 配置发布的内容
    publications {
        // 创建一个MavenPublication类型的publication,并命名为pluginJar
        create<MavenPublication>("pluginJar") {
            // 设置groupId为com.example
            groupId = "com.example"
            // 设置artifactId为项目名称
            artifactId = project.name
            // 设置version为项目版本号
            version = project.version.toString()
            // 设置发布的artifact为jar任务生成的jar文件
            artifact(tasks.jar)
        }
    }
}
  • 在IDE中运行publishToMavenLocal任务,将插件打包成jar文件,并发布到本地Maven仓库。你可以在~/.m2/repository/com/example/hello-plugin/1.0.0目录下找到发布的文件,包括hello-plugin-1.0.0.jar和hello-plugin-1.0.0.pom。
  • 在另一个Gradle项目中,你可以使用plugins块来应用你开发的插件,比如plugins { id("hello") version "1.0.0" }。这样就可以使用插件提供的功能了,比如运行hello任务,打印一句问候语。
相关推荐
坊钰27 分钟前
【Java 数据结构】移除链表元素
java·开发语言·数据结构·学习·链表
chenziang133 分钟前
leetcode hot100 LRU缓存
java·开发语言
时雨h1 小时前
RuoYi-ue前端分离版部署流程
java·开发语言·前端
云计算DevOps-韩老师1 小时前
【网络云计算】2024第52周-每日【2024/12/25】小测-理论&实操-自己构造场景,写5个系统管理的脚本-解析
开发语言·网络·云计算·bash·perl
暮色尽染1 小时前
Python 正则表达式
开发语言·python
IT猿手1 小时前
最新高性能多目标优化算法:多目标麋鹿优化算法(MOEHO)求解GLSMOP1-GLSMOP9及工程应用---盘式制动器设计,提供完整MATLAB代码
开发语言·算法·机器学习·matlab·强化学习
小爬虫程序猿1 小时前
利用Java爬虫获取速卖通(AliExpress)商品详情的详细指南
java·开发语言·爬虫
敲代码敲到头发茂密1 小时前
【大语言模型】LangChain 核心模块介绍(Memorys)
android·语言模型·langchain
xlsw_1 小时前
java全栈day21--Web后端实战之利用Mybaits查询数据
java·开发语言
Murphy20232 小时前
.net4.0 调用API(form-data)上传文件及传参
开发语言·c#·api·httpwebrequest·form-data·uploadfile·multipart/form-