从零开始,教你如何开发一款自己的 IDEA 插件!

2023-11-17

9b1c0167fdd5e67bbf500424c686ed38.jpeg

程序员的成长之路

互联网/程序员/技术/资料共享 

关注

阅读本文大概需要 4 分钟。

来自:blog.csdn.net/smile_795/article/details/125470136

idea插件介绍

作为一枚程序员,平时最常用的ide就是IntelliJ IDEA。平时会用到各种各样的插件,通过插件的使用,提高自己的开发效率。

  • idea具有全局性,安装好插件后,对idea生效,所有的工程均能找到。

  • idea使用的便捷性,在固定的菜单中,或者右键即可看到该插件的使用入口

  • 专注度高,展示出来的内容均是自己需要关注的,不需要关注的就不会展示。可以专注思考自己要怎么用。

  • 和系统解耦,插件可以给给开发提效,却不会去占用项目的空间位置。

为什么开发idea插件?

目前已有插件并不能真的完全满足自己的需求。举个简单的栗子,比如,最近在用mybatis plus的generator,配置完成之后,运行main方法,就可以生成ORM代码。新建一个工程,就需要把代码给拷贝过去,然后再重新配置一下,再生成。

缺点:

  • 过于繁琐,每次都需要去把代码给拷贝过去,然后运行。

  • 冗余,这个代码对于实际的业务来说,没有任何意义。

  • 不便捷,代码只能生成在固定地方,否则就得自己去更改配置。然后自己再重复性的去复制过去。

  • 不便捷,代码放在固定地方,在比较大的工程结构中,自己需要去找。如果新加入的开发不熟悉,并不知道这个在哪,低效。

基于以上思考,就需要开发插件来和系统解耦,达到提效的效果。

开发插件的场景需要准备些什么

  • 首先你需要有一定的开发经验,新手的话,还是需要先学习语言基础,idea的使用等。

  • 有需求场景,知道自己接下来要开发的是一个什么东西,围绕着需求不断地去完善插件

  • 大致看下idea plugin sdk的开发手册,对它能干什么有一个大致的了解。

  • 如果要使用gradle开发,需要对gradle有一定的使用能力。

开发插件流程(最简单的使用场景)

新建项目(使用的最新的idea,创建流程稍有不一样)

42703600615bdd966e21ca4a6c8d7ac0.png

配置gradle

最新版的插件开发使用的是kts的gradle插件。基本用法是一样的,不同的是写法有稍微一点不一样。

一些常用的配置

依赖

//顶层结构
dependencies {
    implementation("org.springframework.boot:spring-boot-starter:2.7.0")
}

// 一般的gradle是 
compile group: 'org.springframework.boot', name: 'spring-boot-starter', version: '2.7.0'

将依赖打进jar包中(不打进去,插件如果有用到依赖,就会无法使用,找不到类)

// 顶层结构
tasks.jar.configure {
    duplicatesStrategy = org.gradle.api.file.DuplicatesStrategy.INCLUDE
    from(configurations.runtimeClasspath.get().filter { it.name.endsWith("jar")}.map { zipTree(it) })
}

将仓库改为阿里云仓库

// 顶层结构
repositories {
    mavenLocal()
    maven("https://maven.aliyun.com/nexus/content/repositories/central/")
    mavenCentral()
}

创建第一个action

import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;

public class MyAction extends AnAction {
  @Override
    public void actionPerformed(@NotNull AnActionEvent e) {
        Project project = e.getProject();
        Messages.showMessageDialog(project, "this is message content", "this message title", Messages.getInformationIcon());
    }
}

将action配置到plugin中

src -> main -> resource -> META-INF -> plugin.xml

<idea-plugin>
  <!-- 插件的id,该id是唯一的,插件的坐标是一维的,只有一个id。这点和maven的不太一样,maven的是二维坐标 -->
 <id>com.geek45.plugin-demo</id>
  <!-- 插件名字-->
  <name>plugin demo</name>
  <!-- 插件的描述,有固定格式,这里可以写html代码 -->
  <description><![CDATA[
        <h1> Demo plugin </h1>
        测试插件 <br>
        点击插件可以弹出一个弹窗
        <p>
        plugin demo <br />
        <b>
              <a href="https://www.geek45.com">Website</a> |
              <a href="https://github.com/xiaopangzhi795/plugin-demo">GitHub</a> |
          </b>
        </p>
  ]]>
  </description>
  <!-- 这里是插件依赖管理,和gradle的依赖不一回事,可以依赖其他的插件 -->
  <depends>com.intellij.modules.platform</depends>
  <!-- 拓展管理,后续的ui页面会在这里配置,暂时用不到 -->
  <extensions defaultExtensionNs="com.intellij">

  </extensions>
  <!-- action配置,按钮展示在哪里需要在这配置 -->
  <actions>
   <action class="com.geek45.action.MyAction" id="myAction" text="action" description="this is action demo" >
      <!-- 将插件放在Tools菜单中的first位置。 -->
      <add-to-group group-id="ToolsMenu" anchor="first" />
    </action>
  </actions>
  
</idea-plugin>

打包

fa32b697dd6b39cf0c1b9bc43f00286e.png

gradle中,运行jar命令,就可以把插件打成jar包,在项目根目录中,有build目录,libs中会有打好的jar包。

4cd48965d1481f3757820d1ff3a2c3c1.png

plugin中,选择本地安装,然后选择刚才打好的jar包,就可以把插件安装到自己的idea中。

本地运行

打包安装太麻烦了,可以选择本地运行的方式进行调试。

6a6f04b245a003e63cec06469f865158.png

选择runIde,就可以本地运行。该命令支持debug运行,debug可以打断点。

运行该命令,会启动一个新的idea,该idea中已经安装了你开发的插件。在该idea中可以直接使用插件,使用过程中,可以在项目里面断点跟进。

新的idea和正常idea操作是一样的,可以打开一个测试code,来测试你的插件是否正常运行。

运行效果

0febc6df9c47e84d381227846d72818b.pngcf213795218d5b8c4a8eb14d5cf6b217.png

<END>

推荐阅读:

一个注解让你的项目减少 30% SQL代码量

面试官:如何设计出健壮的秒杀系统?

互联网初中高级大厂面试题(9个G)
内容包含Java基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper......等技术栈!
⬇戳阅读原文领取!                                  朕已阅
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从零开始,教你如何开发一款自己的 IDEA 插件! 的相关文章

随机推荐

  • MQTT-java使用说明

    MQTT java使用说明 本文的资料下载 链接 https pan baidu com s 1OCfsQ NqcehKy86kYkA wg pwd 1234 提取码 1234 MQTT基本介绍 MQTT是一个客户端服务端架构的发布 订阅模
  • DNS在架构设计中的巧用

    DNS在架构设计中的巧用 一 缘起 一个http请求从客户端到服务端 整个执行流程是怎么样的呢 一个典型流程如上 1 客户端通过域名daojia com请求dns server 2 dns server返回域名对应的外网ip 1 2 3 4
  • python拟合二次函数_Python 最小二乘法 拟合 二次曲线

    最小二乘 Python 二次拟合 随机生成数据 并且加上噪声干扰 构造需要拟合的函数形式 使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as np import matplotl
  • 讯飞aiui的webapi+python使用记录

    1 demo一直不能出语义理解 我以为是我的问题 直到 当前页面配置修改仅在测试环境生效 设备端体验需要SDK传参时在情景模式后加 box 或 更新发布 至生产环境体验 这不坑爹吗 记得在情景模式后加 box
  • BFS的常见算法题-二叉树的最小深度

    背景 对某个二叉树 我们除了用肉眼可以看出其深度 还可以用算法来计算出它的深度 比如 下面的二叉树 一共有三层 它的深度就是3 如果某个分支的叶子结点没有左右子节点 就是它深度中较小的一个 leetcode中 有一题求最小深度 如下图 最小
  • 各种日志关系

    slf4j是日志的门面 也是会说是日志框架
  • 【Unity开发】Unity获取设备屏幕分辨率

    using UnityEngine using System Collections public class ExampleClass MonoBehaviour void Start Resolution resolutions Scr
  • Vscode ssh远程连接失败解决办法

    问题描述 Vscode 通过remote ssh连接远程ubuntu时出现 192 168 x x has fingerprint SHA256 如下图所示 按照提示选择 continue 然后输入正确密码却显示Permission Den
  • java md5 解密_“实用”的JAVA开发工具类库

    简介 Hutool是一个小而全的Java工具类库 通过静态方法封装 降低相关API的学习成本 提高工作效率 使Java拥有函数式语言般的优雅 让Java语言也可以 甜甜的 Hutool中的工具方法来自于每个用户的精雕细琢 它涵盖了Java开
  • 免费的 AI 代码辅助工具-codeium

    不是标题党 是真免费 几天之前 GitHub 发布了 GitHub Copilot X 这是一款基于 OpenAI 的 GPT 4 模型开发的 AI 代码辅助工具 看介绍应该是和 Microsoft 365 Copilot 很像的产物 属于
  • ChatGLM-6B部署笔记

    前言 本笔记基于ChatGLM 6B开源网站 https github com THUDM ChatGLM 6B 完成ChatGLM的本地部署 首先电脑已经安装python3 10 anaconda pycharm2022 3 如若使用本地
  • Application.targetFrameRate安卓apk上设置帧率问题

    一般游戏为了更好的适配各种机型 会对游戏进行锁帧 就会使用Application targetFrameRate这个方法设置帧率 pc上测试是没问题的 但是安卓机上面测试就会发现 设置的帧率只能在30和60帧两个数值来回跳动 参考了unit
  • 21-angular.merge

    通过从src对象 s 复制自己的可枚举属性到dst 深度扩展了目标对象的dst 您可以指定多个src对象 如果您想保留原始对象 那么可以通过将空对象作为目标来实现 var object angular merge object1 objec
  • 睿智的seq2seq模型1——利用seq2seq模型对数字进行排列

    睿智的seq2seq模型1 利用seq2seq模型对数字进行排列 学习前言 seq2seq简要介绍 利用seq2seq实现数组排序 实现方式 一 对输入格式输出格式进行定义 二 建立神经网络 1 神经网络的输入 2 语义编码c的处理 3 输
  • 【English】十大词性之感叹词(感叹句)

    感叹词 文章目录 感叹词 前言 一 十大高频感叹词 1 1 Oh 表示惊讶 指责 痛苦 称赞 懊恼等 可译为 哦 哎呀 噢 啊 呀 等 1 2 Ah 表示惊奇 高兴 讨厌 懊悔 藐视 威胁等 可译为 呀 啊 等 1 3 come 表示鼓励
  • 海量数据分类 liblinear使用总结

    liblinear使用总结 liblinear是libsvm的线性核的改进版本 专门适用于百万数据量的分类 正好适用于我这次数据挖掘的实验 liblinear用法和libsvm很相似 我是用的是 exe文件 利用python的subproc
  • Oracle安装详细教程

    一 安装教程 安装教程1 安装教程2 假设安装时弹出 microsoft net framework 3 5 提示你需要安装这个 你可以选择直接忽视 关掉弹窗 等待数据库复制 安装时 综合看两个教程 基本满足安装需求 二 安装测试 1 在电
  • Mac os Ventura 关闭 accent方言,长按不能连续输入问题

    Mac os Ventura 关闭 accent方言 长按不能连续输入问题 在之前的osx版本遇到长按开启方言输入 无法连续输入问题时 defaults write g ApplePressAndHoldEnabled bool false
  • Python逻辑判断顺序

    Python逻辑判断是有顺序的 如 while l1 is not None and l2 is not None and l1 val lt l2 val node1 next l1 node1 node1 next l1 l1 next
  • 从零开始,教你如何开发一款自己的 IDEA 插件!

    程序员的成长之路 互联网 程序员 技术 资料共享 关注 阅读本文大概需要 4 分钟 来自 blog csdn net smile 795 article details 125470136 idea插件介绍 作为一枚程序员 平时最常用的id