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.exampleimport 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文件,内容如下:
# 指定插件类的全限定名
implementation-class=com.example.HelloPlugin
  • 在项目根目录下创建一个settings.gradle.kts文件,用于配置项目名称和版本号。内容如下:
// 配置项目名称
rootProject.name = "hello-plugin"
// 配置项目版本号
rootProject.version = "1.0.0"
  • 在项目根目录下创建一个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 APIimplementation(gradleApi())// 添加kotlin标准库依赖项,用于编译Kotlin代码implementation(kotlin("stdlib"))
}// 配置jar任务,用于打包插件类和资源为jar文件
tasks.jar {// 设置jar文件名为项目名称-版本号.jar,比如hello-plugin-1.0.0.jararchiveFileName.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,并命名为pluginJarcreate<MavenPublication>("pluginJar") {// 设置groupId为com.examplegroupId = "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任务,打印一句问候语。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/4963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

销售易的12年与七个瞬间

导读&#xff1a;企业级没有捷径 12年对一家企业意味着什么&#xff1f; 在消费互联网领域&#xff0c;12年足够长&#xff0c;短短几年内上市的故事过去屡见不鲜。在企业服务的toB领域&#xff0c;产业成熟和企业发展的时间维度被拉长&#xff0c;但故事同样精彩。 2023年7月1…

ylb-接口5产品详情

总览&#xff1a; 1、service处理&#xff08;根据产品id &#xff0c;查询产品信息&#xff09; 在api模块下service包&#xff0c;ProductService接口添加新方法&#xff08;根据产品id &#xff0c;查询产品信息queryById(Integer id)&#xff09;&#xff1a; package …

java后端解决跨域问题(过滤器或者注解)

1。允许整个项目跨域访问&#xff0c;可通过filter来进行过虑,在文件夹下创建一个名叫&#xff1a; web过滤器的java类&#xff1a; 文件位置及文件名&#xff1a;\src\main\java\pm.lms\WebConfig\SimpleCORSFilter.java 注意这两个文件可以放在src\main\java下的任意一个子文…

Python venv 和 virtualenv 虚拟环境的基本使用

1.前言 venv 和 virtualenv 都是搭建虚拟环境的工具&#xff0c;virtualenv 是第三方开源的&#xff0c;而 venv 作为 virtualenv 的一个子集自 Python3.3 开始集成到标准库中&#xff0c;在 virtualenv 的文档中可以看到他们的区别&#xff1a; 没有 app-data 种子方法&#…

Python爬虫——urllib_post请求百度翻译

post请求&#xff1a; post的请求参数&#xff0c;是不会拼接在url后面的&#xff0c;而是需要放在请求对象定制的参数中 post请求的参数需要进行两次编码&#xff0c;第一次urlencode&#xff1a;对字典参数进行Unicode编码转成字符串&#xff0c;第二次encode&#xff1a;将字…

isaac sim添加孔网格

isaac sim仿真和其它仿真实际上一样&#xff0c;对于孔的仿真&#xff0c;是没那么简单的 在此记录一下踩过的坑 1&#xff0c;首先&#xff0c;你需要在soildworks中将你的孔画出来&#xff0c;并导出stl 2&#xff0c;你可以在win10中使用3D画图查看孔的网格&#xff0c;看…

rust学习-panic

panic! panic示例 use std::fs::File; fn main() {// 使用 Result 类型来处理潜在的错误部分中的Result 枚举// enum Result<T, E> {// Ok(T),// Err(E),// }// // File::open 函数的返回值类型是 Result<T, E>// T 放入了成功值的类型 std::fs::File&…

【css】用css样式快速写右上角badge徽标,颜色设置为渐变色

先看效果展示&#xff0c;已公开显示在图片卡片的右上角。 首先是dom代码&#xff1a;需要两个view或者div&#xff0c;public-badge是“已公开”那个矩形&#xff0c;show-signal是右边那个下三角&#xff0c;也就是阴影部分&#xff0c;这样看起来比较有立体感。 <view…

Java基础-内部类

内部类指的是在一个类的内部定义的类&#xff0c;Java 中存在四种内部类&#xff0c;分别是成员内部类、局部内部类、静态内部类和匿名内部类。 成员内部类 成员内部类在类文件中与成员变量和成员方法并列&#xff0c;作为类的成员存在。 成员内部类可以访问外部类的所有成员…

虚拟化技术及实时虚拟化概述

版权声明&#xff1a;本文为本文为博主原创文章&#xff0c;未经本人同意&#xff0c;禁止转载。如有问题&#xff0c;欢迎指正。博客地址&#xff1a;https://www.cnblogs.com/wsg1100/ 文章目录 一、前言二、分时系统三、虚拟化介绍四、虚拟化实现方式及分类模拟器Type2虚拟化…

欧姆龙PLC联网

一、设备信息确认 左上角的为PLC型号,如图该PLC型号为CP1H,不同型号的欧姆龙PLC通讯方面有什么差别呢? 通讯能力和方式不同: 有些型号PLC自带网口,有些则需要扩展(上图中右侧的两个红框内为后扩展的通讯口,扩展模块可以随意组合双网口,双232串口,双485串口都可以)…

JDBC编程连接MySQL数据库遇到的两个错误

在进行java与MySQL数据库进行连接的时候我遇到了两个报错&#xff0c;在一开始的时候遇到的报错是Access denied for user yulinlocalhost (using password: YES)&#xff0c;此时我在网络上搜索发现是密码出现错误的问题&#xff08;出现该问题确实是密码错误&#xff09;&…

【DevOps】Atlassian插件开发指南

本文以Bamboo插件开发为例&#xff0c;记录一下插件开发过程。 一、简介 Atlassian Bamboo 6.9.1 是一款持续集成和持续交付&#xff08;CI/CD&#xff09;工具&#xff0c;支持使用插件扩展其功能。如果需要开发自己的 Bamboo 插件并添加到 Bamboo 中&#xff0c;则可以参考…

设计模式——享元模式

享元模式 定义 享元模式&#xff08;Flyweight Pattern&#xff09;是池技术的重要实现方式。 使用共享对象可以有效地支持大量的细粒度对象。 优缺点、应用场景 优点 可以大大减少应用程序创建对象的数量&#xff0c;降低程序内存占用。 缺点 提高了系统的复杂度&…

spring-IOC

IOC容器 简介 IoC(Inversion of Control)控制反转&#xff0c;是一种基于面向对象编程法则的设计思想&#xff0c;它设计出的程序具有松耦合、更优良的特点。 IoC容器是Spring框架中重要的核心组件之一&#xff0c;贯穿了Spring从出生到成长的整个过程&#xff0c;Spring通过I…

零基础学习,轻松打造物业服务小程序

现如今&#xff0c;物业服务已经成为了人们生活中不可或缺的一部分。为了更好地满足人们对物业服务的需求&#xff0c;许多企业和个人开始开发物业服务小程序&#xff0c;以便提供更加便捷和高效的服务。然而&#xff0c;对于大多数人来说&#xff0c;搭建一个小程序可能需要一…

智能ai绘画软件帮你用科技点亮创意火花

李明&#xff1a;嘿&#xff0c;你听说过ai绘画软件吗&#xff1f;我最近对数字艺术产生了浓厚的兴趣 王磊&#xff1a;当然&#xff01;ai绘画软件真是太神奇了&#xff01;它可以将抽象的文字描述转换成惊人的艺术作品。 李明&#xff1a;是吗&#xff1f;它们绘制的效果怎…

数据库及数据表的相关操作(一)

目录 概念知识一、管理逻辑库与数据表二、常用数据类型和约束2.1 数字数据类型2.2 字符串数据类型2.3 日期数据类型2.4 字段约束 三、索引运行机制和使用原则3.1 创建索引3.2 添加与删除索引3.3 索引的使用原则 概念知识 关系型数据库&#xff1a; 使用了关系模型的数据库系统&…

深度学习——CNN卷积神经网络

基本概念 概述 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种深度学习中常用于处理具有网格结构数据的神经网络模型。它在计算机视觉领域广泛应用于图像分类、目标检测、图像生成等任务。 核心思想 CNN 的核心思想是通过利用局部…

MySQL-DQL-聚合函数

目录 聚合函数 注意事项 聚合函数 介绍&#xff1a;将表中的数据作为一个整体&#xff0c;进行纵向计算语法&#xff1a;select 聚合函数&#xff08;字段列表&#xff09; from 表名SUM 求和COUNT 统计数量 具体代码 -- 1.统计该企业员工数量--count -- count(字段) select c…