idea 插件开发之 HelloWorld
前言
本文使用的 idea 2023.3 版本进行插件入门开发,首先要说明的是 idea 2023 版本及以后的 idea,对插件开发进行了一定程度的变动:
1、创建项目时不再支持 maven 选项
2、必须是 jdk17 及以后版本(点击查看官网版本对应关系)
3、默认创建的项目是基于 kotlin 的
4、idea 默认没有安装 ”Plugin DevKit“ 插件,需要自己安装
基于以上相关内容,本文创建一个 HelloWorld 级别的 idea 插件。
入门教程
一、安装开发插件

二、新建 Project

下面是创建项目后 idea 默认生成的代码结构:

因为 idea 默认基于 gradle 构建项目,所有工程中不再有 pom.xml 文件。虽然 idea 默认使用 kotlin,但是我想目前阶段大部分开发者应该还是习惯 java 模式,所以需要做一些修改,去除 kotlin 的相关配置。
1、去除 build.gradle.kts 和 settings.gradle.kts 文件的 .kts 后缀,修改 src/main/kotlin 中的 kotlin 为 java,修改后的截图如下所示。

2、build.gradle.kts 文件介绍和修改
这个文件定义了IDEA插件构建时依赖的环境,以及最终支持在哪些环境下面运行插件,因为我们不使用 kotlin,所以我需要进行一些修改。
修改前的内容如下:
// 项目依赖的插件,默认会依赖kotlin,我们使用java来开发插件所以这里依赖我们去掉它
plugins {id("java")id("org.jetbrains.kotlin.jvm") version "1.9.20"id("org.jetbrains.intellij") version "1.16.0"
}
// 插件的一些基本信息,按实际情况填写
group = "com.example"
version = "1.0-SNAPSHOT"
// 依赖的中央仓库配置,这里我们一般是会改为直接去idea官网下载或者使用你的私服等镜像地址
repositories {mavenCentral()
}
// 这里是很重要的配置,定义了gradle构建时依赖的idea版本,我们进行插件调试的时候,会使用这里定义的idea版本来进行测试
intellij {version.set("2023.1.5")type.set("IC") // Target IDE Platformplugins.set(listOf(/* Plugin Dependencies */))
}
// 定义构建的任务,主要是改一下编译的jdk版本,插件适用的idea版本,字符编码等信息
tasks {// Set the JVM compatibility versionswithType<JavaCompile> {sourceCompatibility = "17"targetCompatibility = "17"}withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {kotlinOptions.jvmTarget = "17"}patchPluginXml {sinceBuild.set("231")untilBuild.set("241.*")}signPlugin {certificateChain.set(System.getenv("CERTIFICATE_CHAIN"))privateKey.set(System.getenv("PRIVATE_KEY"))password.set(System.getenv("PRIVATE_KEY_PASSWORD"))}publishPlugin {token.set(System.getenv("PUBLISH_TOKEN"))}
}
修改后的内容如下:
plugins {id("java")id("org.jetbrains.intellij") version "1.16.0"
}
group = "com.example"
version = "1.0-SNAPSHOT"
repositories {mavenCentral()
}
intellij {version = "2023.3"type = "IC" // Target IDE Platformplugins = [/* Plugin Dependencies */]updateSinceUntilBuild = false
}
tasks.withType(JavaCompile.class).configureEach(task -> {task.getOptions().setEncoding("UTF-8");sourceCompatibility = "17";targetCompatibility = "17";
});
tasks.patchPluginXml {// 注意这个版本号不能高于上面intellij的version,否则runIde会报错sinceBuild.set("231")untilBuild.set("241.*")
}
tasks.signPlugin {certificateChain.set(System.getenv("CERTIFICATE_CHAIN"))privateKey.set(System.getenv("PRIVATE_KEY"))password.set(System.getenv("PRIVATE_KEY_PASSWORD"))
}
tasks.publishPlugin {token.set(System.getenv("PUBLISH_TOKEN"))
}
修改完成后,点击 Gradle 小图标,确保最终控制台输出 BUILD SUCCESSFUL,通过构建后,右侧的 Gradle 面板就会出现各项 Task 内容,如下图所示:

3、配置 IntelliJ Platform Plugin SDK
IntelliJ Platform Plugin SDK 就是开发 IntelliJ 平台插件的 SDK,是基于 JDK 之上运行的,类似于开发 Android 应用需要 Android SDK。
导航到 File | Project Structure,选择对话框左侧栏 Platform Settings 下的 SDKs 进行添加操作,如下图所示:



4、配置关联源代码(可选,为了方便查看代码)


注意:关联源代码后,idea 下面会有扫描索引的操作,可能会导致你 idea 很卡,这里需要等一会。
三、创建 Action
现在创建一个点击可以弹出 HelloWorld 提示框的一个Action(动作)


点击 OK 按钮创建 Action 后,idea 为我们自动创建一个该 Action 动作的 Java 类 和 该插件对应配置,如下图所示:

接下来我们在 actionPerformed 方法中编写我们这个动作的代码,这里写一段代码使之弹出一个对话框,如下:
public class ShowHelloAction extends AnAction {@Overridepublic void actionPerformed(AnActionEvent e) {String message = "你好,秀一下";Messages.showInfoMessage(e.getProject(), message, "标题");}
}
四、测试 Action
编写好代码后,我们在右侧 Gracle 中运行或者 Debug运行,稍等一会后就会打开一个新的 idea(这个运行的 idea 对应的版本就是 build.gradle 配置文件中配置的 version 所对应的版本) ,然后我们在这个新打开的 idea 中操作我们刚刚创建的 Action 即可验证效果。
如下图所示:



五、打包插件
插件需要传播和发布,都需要打包,打包后会获得一个 zip 包,你可以分享给其他人安装,或者到 idea 插件市场里上传发布。
执行 buildPlugin 进行打包,观察控制台输出打包成功后,文件会生成到工程的 build/distributions 目录中,如下图所示:

六、插件校验
因为IDEA版本很多,如果你的插件希望可以被多个 idea 版本兼容的话,那么在你分享给朋友或者发布到 idea 插件市场之前,建议先走一次校验流程。这个校验流程会把所有版本的 idea 自动走一次你的插件(只是校验是否能否正常在各个版本中安装运行)。由于这个版本会校验 idea 版本的兼容性,所以这里的耗时相对来说会比较长,因为它会自动下载各个版本的 idea 去挨个测试,每个版本的 idea 都要大几百上 G 的大小,这里你需要特别注意你的磁盘空间。
执行 Gradle 的 verifyPlugin 任务后慢慢等待直到完全结束。
小结
至此,IDEA插件的第一个 Demo 到此结束。入门的插件开发并不难,有兴趣的话可以从官网或者其他开源的IDEA插件中翻翻代码学习,深入插件开发所需要学习的内容还是非常多的。
相关文章:
idea 插件开发之 HelloWorld
前言 本文使用的 idea 2023.3 版本进行插件入门开发,首先要说明的是 idea 2023 版本及以后的 idea,对插件开发进行了一定程度的变动: 1、创建项目时不再支持 maven 选项 2、必须是 jdk17 及以后版本(点击查看官网版本对应关系&…...
极速文件搜索工具Everything结合内网穿透实现远程搜索本地文件
文章目录 前言1.软件安装完成后,打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库,我们需要两个软件的支持,分别是cpolar(用于搭建内网穿透数据隧道…...
【PowerMockito:编写单元测试过程中采用when打桩失效的问题】
问题描述 正如上图所示,采用when打桩了,但是,实际执行的时候还是返回null。 解决方案 打桩时直接用any() 但是这样可能出现一个mybatisplus的异常,所以在测试类中需要加入以下代码片段: Beforepublic void setUp() …...
[蓝桥杯 2018省赛]回家路费
回家路费 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小明被不明势力劫持。后莫名其妙被扔到 X 星站再无问津。小明得知每天都有飞船飞往地球,但需要 108108 元的船票,而他却身无分文。…...
学生管理系统(vue + springboot)
学生管理系统(vuespringboot)资源-CSDN文库 项目介绍 这是一个采用前后端分离开发的项目,前端采用 Vue 开发、后端采用 Spring boot Mybatis 开发。 项目部署 ⭐️如果你有 docker 的话,直接 docker compose up 即可启动&#…...
算法(3)——二分查找
一、什么是二分查找 二分查找也称折半查找,是在一组有序(升序/降序)的数据中查找一个元素,它是一种效率较高的查找方法。 二、二分查找的原理 1、查找的目标数据元素必须是有序的。没有顺序的数据,二分法就失去意义。 2、数据元素通常是数值…...
golang实现可中断的流式下载
golang实现可中断的流式下载 最近有一个需要实现下载功能: 从服务器上读取文件,返回一个ReadCloser在用户磁盘上创建文件,通过io.Copy实现文件下载(io.Copy是流式的操作,不会出现因文件过大而内存暴涨的问题࿰…...
SpringBoot 医药咨询系统
概述 智慧医药系统(smart-medicine)是一个基于 SpringBoot 开发的Web 项目。整体页面简约大气,增加了AI医生问诊功能,功能设计的较为简单。 开源地址 https://gitcode.net/NVG_Haru/Java_04 界面预览 功能介绍 游客功能介绍 …...
C语言转WebAssembly的全流程,及Web端调用测试
第一步:安装环境 参考网址:https://emscripten.org/docs/getting_started/downloads.html 具体过程: 克隆代码:git clone https://github.com/emscripten-core/emsdk.git进入代码目录:cd emsdk获取最新远端代码&…...
前端--基础 目录文件夹和根目录 VScode打开目录文件夹
目录 目录文件夹和根目录 : 目录文件夹 : 根目录 : VScode 打开目录文件夹 : VScode 打开文件夹 : 拖拽目录文件夹 : 目录文件夹和根目录 : 我们都清楚,在实际的工作中会…...
传感器原理与应用复习--超声波、微波、红外及热电偶传感器
文章目录 上一篇超声波传感器微波传感器红外传感器热电偶传感器下一篇 上一篇 传感器原理与应用复习–光电式与半导体式传感器 超声波传感器 超过2万赫兹以上的波称为超声波 压电式超声波探头常用材料是压电晶体和压电陶瓷。它是利用压电材料的压电效应来工作的。 逆压电效…...
matlab概率论例子
高斯概率模型: [f,xi] ksdensity(x): returns a probability density estimate, f, for the sample in the vector x. The estimate is based on a normal kernel function, and is evaluated at 100 equally spaced points, xi, that cover the range of the da…...
Appium+python自动化(一)- 环境搭建—上(超详解)
简介 今天是高考各地由于降水,特别糟糕,各位考生高考加油,全国人民端午节快乐。最近整理了一下自动化的东西,先前整理的python接口自动化已经接近尾声。即将要开启新的征程和篇章(Appium&python)。那么…...
基于SpringBoot的精简博客系统
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的精简博客系统,java项目…...
STM32的在线升级(IAP)实现方法:BOOT+APP原理详解
0 工具准备 Keil uVision5 Cortex M3权威指南(中文) STM32参考手册 1 在线升级(IAP)设计思路 为了实现STM32的在线升级(IAP)功能,通常会将STM32的FLASH划分为BOOT和APP两个部分,BOO…...
【芯片DFX】Arm调试架构篇
【芯片DFX】万字长文带你搞懂JTAG的门门道道【芯片DFX】ARM:CoreSight、ETM、PTM、ITM、HTM、ETB等常用术语解析...
ES应用_ES实战
依靠知识库使用es总结一些使用技巧。 1 快速入门 ES是将查询语句写成类似json的形式,通过关键字进行查询和调用。 1.1 创建 下面创建了一个主分片为5,副本分片为1的ES结构。ES本身是一种noschema的结构,但是可以通过指定mapping编程schema的…...
Ubuntu上如何找到设备,打印串口日志
dmesg 找设备 sudo mincom -s 配置minicom mincom 打印串口日志 PS: Windows上使用MobaXterm / putty / Xshell / SecureCRT等 ubuntu串口的安装和使用(usb转串口)_ubuntu上如何把usb设备映射到tty-CSDN博客...
本地映射测试环境域名,解决登录测试环境后,也可以使用本地域名访问,可以正常跑本地项目
问题:单点登录进入系统不使用token,是将token携带在cookie中,登录成功后每次调用接口,都会在cookie中自动携带,这样导致即使在本地使用proxy代理解决了跨域,但由于本地域名不一致,也无法进行本地…...
VSCode使用Remote SSH远程连接Windows 7
结论 VSCode Server不能启动,无法建立连接。 原因 .vscode-server 目录中的 node.exe 无法运行。 原因是Node.js仅在Windows 8.1、Windows Server 2012 R2或更高版本上受支持。 由于vscode基于node.js v14,不支持Windows 7操作系统。 另ÿ…...
告别无效Agent工程!掌握这3大核心,让你的AI助手效率飙升10倍!
最近 X 上有篇文章很火,叫《How To Be A World-Class Agentic Engineer》,作者是个深度的 Agent 工程实践者。 文章开头是这样描述的:你用着 Claude Code,每天琢磨自己是不是把它的能力榨干了。偶尔看到它干出极其弱智的事情&…...
Restate监控与调试:如何利用内置工具实现应用全链路可观测性
Restate监控与调试:如何利用内置工具实现应用全链路可观测性 【免费下载链接】restate Restate is the platform for building resilient applications that tolerate all infrastructure faults w/o the need for a PhD. 项目地址: https://gitcode.com/gh_mirro…...
淘宝淘金币自动化脚本:每天节省20分钟的终极解决方案
淘宝淘金币自动化脚本:每天节省20分钟的终极解决方案 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi 淘宝淘…...
4个维度解析EAS CLI:移动开发效率提升工具
4个维度解析EAS CLI:移动开发效率提升工具 【免费下载链接】eas-cli Fastest way to build, submit, and update iOS and Android apps 项目地址: https://gitcode.com/gh_mirrors/ea/eas-cli 定位核心价值:重新定义移动开发工作流 在移动应用开…...
嵌入式NTP客户端高精度时间同步实现
1. NTP客户端库深度解析:嵌入式系统中的高精度时间同步实现1.1 项目背景与工程痛点NTP(Network Time Protocol)是嵌入式设备实现网络时间同步的核心协议。在工业控制、数据采集、日志记录等场景中,毫秒级甚至亚毫秒级的时间精度直…...
AMD ROCm:如何从零构建高性能GPU加速应用?
AMD ROCm:如何从零构建高性能GPU加速应用? 【免费下载链接】ROCm AMD ROCm™ Software - GitHub Home 项目地址: https://gitcode.com/GitHub_Trending/ro/ROCm AMD ROCm是一个完整的开源GPU计算平台,专为高性能计算和人工智能应用设计…...
[Android S] 深入解析statsd的log统计机制与实现
1. 认识Android系统中的statsd statsd是Android系统中一个非常重要的后台服务,它的主要职责是收集系统和应用的各类统计信息。你可能不知道,每次你在Android设备上执行操作时,statsd都在默默记录着各种数据。这些数据对于系统优化、性能分析和…...
SoccerData:一站式足球数据抓取与分析工具实战指南
SoccerData:一站式足球数据抓取与分析工具实战指南 【免费下载链接】soccerdata ⛏⚽ Scrape soccer data from Club Elo, ESPN, FBref, FiveThirtyEight, Football-Data.co.uk, SoFIFA and WhoScored. 项目地址: https://gitcode.com/gh_mirrors/so/soccerdata …...
实时风控延迟突增2300ms?揭秘Python部署中被低估的asyncio事件循环阻塞陷阱
第一章:实时风控延迟突增2300ms?揭秘Python部署中被低估的asyncio事件循环阻塞陷阱在某次线上实时风控服务发布后,P99延迟从平均120ms骤升至2420ms,监控图表呈现尖锐毛刺。排查发现,问题并非源于模型推理或数据库慢查询…...
Sentinel-2 Level-2A数据怎么用?从QA60波段解读到实战:去云、计算NDVI/ARVI并导出GeoTIFF
Sentinel-2 Level-2A数据实战指南:从QA60波段解析到植被指数计算全流程 当第一次打开Sentinel-2 Level-2A数据时,很多研究者会被那些看似晦涩的质量波段搞得一头雾水。记得我刚开始处理这些数据时,就曾因为忽略了QA60波段的重要性,…...
