idea插件开发和传统的java项目不太一样,开发前有三个限制:
- Gradle:类似maven的构建工具,建议采用V8.1+版本;
- javaSDK:正常要求java11或java17版本;
- Intellij Platform SDK:需要注意这是插件开发的sdk,不是javaSDK。建议下载JetBrains Runtime version 17.0.6
一、开发前准备知识
1、What's Intellij
intellij-community源码,任何人都可以使用。但基于此平台开发的软件比如idea、phpStorem可能是收费的。
2、环境要求
idea插件开发的硬性开发环境只有两个:Intellij platformSDK和Gradle。使用IntelliJ idea创建插件项目的过程中提示下载哪个版本的SDK,但为了清楚此处还是要着重描述一下:
- Gradle:建议采用8.1+版本,不同的IntelliJ idea对集成的Gradle的版本要求不同,不同的Gradle对javaSDK的版本要求也不同,在官网上有对应的关系表,详细可以查看Compatibility Matrix;
- PlatformSDK:建议采用JetBrains Runtime version 17.0.6版本,注意和Gradle兼容即可,也可以采用其它版本的SDK,比如Amazon Corretto 11.0.16.1等;
3、Idea插件类型
用IDEA创建插件时,共有两个选项:plugin和theme,但按插件的实际用途可细分为如下几类,除UI Themes外全部属于plugin范畴。
- UI Themes(UI主题)
- Custom language support (自定义编程语言支持,如Kotlin)
- Framework integration (框架集成,例如Spring属于此类)
- Tool integration (工具集成整合,如Maven、Gradle、Git)
- User interface add-ons (用户界面组件,例如Random Background)
4、必须要掌握的编程技术
- Java 或 Kotlin:掌握其中一种语言即可
- Gradle构建工具:掌握简单的配置即可,不需要学习Groovy编程
- Swing:整个IDEA界面组件用的都是Swing,不能使用AWT
5、可参考的文档
Idea开发网上可参考的文档非常少,唯一可依赖的就是官方文档和研读Github上一些开源插件的源码,下面列出了开发idea插件要经常用到的几个网址。
- Gradle build tool官网:https://gradle.org/
- Gradle plugin官网:https://plugins.gradle.org/
- Intellij plugin官方文档:https://plugins.jetbrains.com/docs/intellij/welcome.html#usage
- Intellij plugin开发者社区:https://intellij-support.jetbrains.com/
- Intellij plugin插件市场:https://plugins.jetbrains.com/
- Intellij plugin开发FAQ:https://plugins.jetbrains.com/docs/intellij/faq.html
- Intellij plugin开发有用的工具:https://plugins.jetbrains.com/docs/intellij/useful-links.html
二、Idea中创建ide插件工程
1、创建插件工程
1、新建 工程,选择【文件】-【新建】-【项目】,在弹出窗口选择IDE插件。如下图所示:
编辑【注意事项】:JDK处一定要选择合适版本的jdk,可在JDK选择下拉选框中选择需要的版本进行下载。如果Intellij idea是2020.3+版本要求最低java11,Intellij idea是2022.2+版本要求最低java17。
2、设置 项目,选择【文件】 -【项目结构】,设置SDK和编译版本,如下图所示:
编辑【注意事项】:此处的语言级别和SDK并不需要一一匹配,但建议选择匹配的级别,这样可以在后续编译代码过程中减少一些没必要的麻烦。
3、设置 Gradle,选择【首选项】-【构建、执行、部署】-【构建工具】-【Gradle】,修改下图红框内的默认内容为下图所示:
编辑4、创建好后项目目录大概如下图所示(各个配置文件的配置方法会在下一章节中进行详细讲解,本地只是选保证插件可以正常运行):
编辑
【注意事项】:最新版本的idea创建的源码路径是src/main/kotlin,如果用java开发的话只需用重构功能把kotlin改名为java即可。
2、创建第一个Action文件
ide插件定义的点击事件称为Action,需要继承AnAction类。本例会在Idea的【工具】菜单栏中添加一个名为【通知】的新菜单,点击后以气泡的方式弹出一句提示语。选择【文件】-【新建】-【Plugin DevKit】-【Action】,会显示如下设置页面,熟悉开发后不需要用此向导;
编辑- 操作ID:整个插件范围内全局唯一;
- 类名:插件的java类的名称或全路径;
- 名称:显示在菜单栏上的名称;
- 描述:随便写,主要是为了方便记忆,和插件最终显示无关;
- 添加到组--组:插件要添加到哪个菜单里,因为我们是在【工具】栏中添加,所以选择【ToolsMenu】;
- 添加到组--操作:组中已有的菜单,和定位标记一起来确定新创建的菜单的显示位置,这里选择【SmartSearchActoin】
- 添加到组-定位标记:插件在菜单中的显示位置;
以上设置好后,在名为【FirstTest.java】类中添加如下代码实现:
import com.intellij.notification.Notification;
import com.intellij.notification.NotificationDisplayType;
import com.intellij.notification.NotificationGroup;
import com.intellij.notification.Notifications;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.ui.MessageType;
public class FirstTest extends AnAction {
@Override
public void actionPerformed(AnActionEvent e) {
// TODO: insert action logic here
NotificationGroup notificationGroup = new NotificationGroup("testid", NotificationDisplayType.BALLOON, false);
/**
* content : 通知内容
* type :通知的类型,warning,info,error
*/
Notification notification = notificationGroup.createNotification("测试通知", MessageType.INFO);
Notifications.Bus.notify(notification);
}
}
至此,一个简单的idea插件就制作完成了。
3、编译运行插件
1、编译,点击右侧Gradle图标,然后双击【Tasks】-【build】-【build】,因为要下载相应的依赖jar包,此处可能会执行十几分钟。
编辑2、运行,点击右侧Gradle图标,然后双击【Tasks】-【intellij】-【runIde】,此处会重启一个新的idea窗口专门用于测试插件,支持调试。
编辑3、测试,稍等几秒会打开一个新的idea做为测试环境(开发的插件会自动安装在新的idea中),新建一个测试project,然后打开【Tools】菜单栏,会看到一个名为【通知】的菜单,点击后会在右下角弹出一句提示,如下图所示:
编辑
4、本地发布
另一种测试方式就是本地打包,然后集成到开发的idea, 方法是先打包:
编辑
再从本地磁盘安装
编辑
然后重启idea。
三、打包发布插件到应用市场
发布过程参考官方文档即可:
四、更好的学习插件开发
下面标红的为重点内容
1、官方文档
第一部分 — plugins
描述如何创建可以扩展 IntelliJ 平台的插件。包括有关如何设置项目、注册扩展点、针对 IntelliJ 平台的特定版本以及如何打包、部署和测试插件的详细信息。
第二部分——Base Platform
描述架构的基础层,它提供许多功能和实用程序,例如组件模型、用户界面、文档和编辑器、虚拟文件系统、设置、线程和后台任务。基础平台层主要包括不针对语言特性或解析的 IntelliJ 平台的功能。
第三部分——Project Model
记录项目模型,它表示当前加载项目的文件和配置,以及用于构建项目的构建系统。
第四部分——PSI
程序结构接口 (PSI) 为许多不同的文件类型构建句法和语义模型。本节介绍如何使用 PSI、导航和操作语法树,还介绍了强大的引用系统,它允许语法树节点引用语义模型中的项目。它还详细说明了 PSI 如何创建和使用索引。
第五部分——Features
描述如何扩展使用 PSI 层的各种功能并与之交互,例如代码完成、导航、Alt+Enter项目、意图、重构等。另请参阅下面的自定义语言部分,了解仅在添加对新语言的支持时适用的特定于语言的功能。
第六部分——Testing
描述用于编写涵盖插件功能的自动化测试的可用基础设施。
第七部分 — Custom Languages
插件经常扩展对现有语言的支持,例如向 Java 文件添加检查。本节介绍如何向 IntelliJ 平台添加对默认不支持的新语言的支持,创建解析器、句法和语义模型,以及构建在其上的所有功能。
第八部分 — Product Specific
IntelliJ 平台中的许多功能与语言和产品无关。例如,代码检查在 Java 中的工作方式与在 Ruby 中的工作方式相同;只是语法树和语义信息不同。本节介绍特定于产品的功能,例如特定的项目模型差异以及如何在插件中定位它们。
第九部分 — Custom IDEs
记录如何使用 IntelliJ 平台创建新的自定义 IDE,而不是现有产品(例如 WebStorm 或 Android Studio)的插件。
第十部分——Themes
描述如何为基于 IntelliJ 平台的 IDE 创建主题。包括有关如何在 JetBrains Marketplace 上设置、自定义、构建和发布主题项目的详细信息。
附录I——Resources
指向有用资源的链接、词汇表、扩展点和侦听器列表、有关如何探索 IntelliJ 平台 API和学习资源的提示。
附录 II — API and Compatibility
有关验证插件兼容性的信息和向后不兼容的API 更改列表,以及IntelliJ 平台每个主要版本中的显着更改和新功能。
附录 III — 工具
Gradle IntelliJ 插件等常用工具的参考和使用指南。
2、插件开发需要关注的idea文件路径
如果是单独安装的软件,则目录结构如下:
Configuration (idea.config.path):~/Library/Application Support/JetBrains/IntelliJIdea2022.2
Plugins (idea.plugins.path): ~/Library/Application Support/JetBrains/IntelliJIdea2022.2/plugins
System (idea.system.path): ~/Library/Caches/JetBrains/IntelliJIdea2022.2
Logs (idea.log.path): ~/Library/Logs/JetBrains/IntelliJIdea2022.2
如果是通过Jetllij Toolbox App安装的idea,则目录结构如下:
Configuration (idea.config.path): ~/Library/Application Support/JetBrains/IntelliJIdea2022.2
Plugins (idea.plugins.path): ~/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U
System (idea.system.path): ~/Library/Caches/JetBrains/IntelliJIdea2022.2
Logs (idea.log.path): ~/Library/Logs/JetBrains/IntelliJIdea2022.2