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任务,打印一句问候语。
相关推荐
cch891821 小时前
汇编与Java:底层与高层的编程对决
java·开发语言·汇编
荒川之神1 天前
拉链表概念与基本设计
java·开发语言·数据库
chushiyunen1 天前
python中的@Property和@Setter
java·开发语言·python
小樱花的樱花1 天前
C++ new和delete用法详解
linux·开发语言·c++
froginwe111 天前
C 运算符
开发语言
BduL OWED1 天前
mysql的主从配置
android·mysql·adb
fengfuyao9851 天前
低数据极限下模型预测控制的非线性动力学的稀疏识别 MATLAB实现
开发语言·matlab
摇滚侠1 天前
搭建前端开发环境 安装 nodejs 设置淘宝镜像 最简化最标准版本 不使用 NVM NVM 高版本无法安装低版本 nodejs
java·开发语言·node.js
t198751281 天前
MATLAB十字路口车辆通行情况模拟系统
开发语言·matlab
人需要PID1 天前
【卡尔曼工具箱-EKF-MATLAB应用】
android