idea插件开发和传统的java项目不太一样,开发前有三个限制:
- Gradle:类似maven的构建工具,建议采用V8.1+版本;
- javaSDK:正常要求java11或java17版本;
- Intellij Platform SDK:需要注意这是插件开发的sdk,不是javaSDK。建议下载JetBrains Runtime version 17.0.6
IntelliJ 平台本身并不是一个产品,而是提供了一个用于构建 IDE 的平台。这个平台本身是开源的,源码可从intellij-community源码,任何人都可以使用。但基于此平台开发的软件比如idea、phpStorem可能是收费的。
idea插件开发的硬性开发环境只有两个:Intellij platformSDK和Gradle。使用IntelliJ idea创建插件项目的过程中提示下载哪个版本的SDK,但为了清楚此处还是要着重描述一下:
用IDEA创建插件时,共有两个选项:plugin和theme,但按插件的实际用途可细分为如下几类,除UI Themes外全部属于plugin范畴。
Idea开发网上可参考的文档非常少,唯一可依赖的就是官方文档和研读Github上一些开源插件的源码,下面列出了开发idea插件要经常用到的几个网址。
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即可。
ide插件定义的点击事件称为Action,需要继承AnAction类。本例会在Idea的【工具】菜单栏中添加一个名为【通知】的新菜单,点击后以气泡的方式弹出一句提示语。选择【文件】-【新建】-【Plugin DevKit】-【Action】,会显示如下设置页面,熟悉开发后不需要用此向导;
以上设置好后,在名为【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插件就制作完成了。
1、编译,点击右侧Gradle图标,然后双击【Tasks】-【build】-【build】,因为要下载相应的依赖jar包,此处可能会执行十几分钟。
2、运行,点击右侧Gradle图标,然后双击【Tasks】-【intellij】-【runIde】,此处会重启一个新的idea窗口专门用于测试插件,支持调试。
3、测试,稍等几秒会打开一个新的idea做为测试环境(开发的插件会自动安装在新的idea中),新建一个测试project,然后打开【Tools】菜单栏,会看到一个名为【通知】的菜单,点击后会在右下角弹出一句提示,如下图所示:
另一种测试方式就是本地打包,然后集成到开发的idea, 方法是先打包:
再从本地磁盘安装
然后重启idea。
发布过程参考官方文档即可:
1、给插件签名
2、发布插件
下面标红的为重点内容
第一部分 — 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 插件等常用工具的参考和使用指南。
如果是单独安装的软件,则目录结构如下:
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