• 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文件,内容如下:
    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!")
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 在plugin源集中创建一个resources/META-INF/gradle-plugins目录,用于存放插件的属性文件。在该目录下创建一个hello.properties文件,内容如下:
    # 指定插件类的全限定名
    implementation-class=com.example.HelloPlugin
    
    • 1
    • 2
    • 在项目根目录下创建一个settings.gradle.kts文件,用于配置项目名称和版本号。内容如下:
    // 配置项目名称
    rootProject.name = "hello-plugin"
    // 配置项目版本号
    rootProject.version = "1.0.0"
    
    • 1
    • 2
    • 3
    • 4
    • 在项目根目录下创建一个build.gradle.kts文件,用于配置项目的构建逻辑。在这里,你需要添加一些依赖项,比如gradleApi()和kotlin(“stdlib”),以及一些任务,比如jar和publishToMavenLocal。内容如下:
    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)
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 在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任务,打印一句问候语。
  • 相关阅读:
    算法与数据结构【30天】集训营——线性表的定义及特点-顺序表的表示与实现及操作(03)
    Java基本问题:求教
    DevOps|破除壁垒,重塑协作-业务闭环释放产研运协作巨大效能
    Elasticsearch 范围查询
    JSR303参数校验(2)
    MATLAB/Python编程:绘制一维和二维的分布直方图
    文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《就地无常规电源支撑下考虑新能源基地频率稳定的储能优化配置方法》
    Kotlin中的选择结构语句
    从程序员到架构师,如何才能快速成长?
    ssm+java+vue家乡农产品特产销售商城小程序#毕业设计
  • 原文地址:https://blog.csdn.net/feather_wch/article/details/131746478