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 平台本身并不是一个产品,而是提供了一个用于构建 IDE 的平台。这个平台本身是开源的,源码可从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插件要经常用到的几个网址。

二、Idea中创建ide插件工程

1、创建插件工程

1、新建 工程,选择【文件】-【新建】-【项目】,在弹出窗口选择IDE插件。如下图所示:

用java开发idea插件 官方教程 ideal插件开发_gradle

【注意事项】:JDK处一定要选择合适版本的jdk,可在JDK选择下拉选框中选择需要的版本进行下载。如果Intellij idea是2020.3+版本要求最低java11,Intellij idea是2022.2+版本要求最低java17。

2、设置 项目,选择【文件】 -【项目结构】,设置SDK和编译版本,如下图所示:

用java开发idea插件 官方教程 ideal插件开发_intellij-idea_02

【注意事项】:此处的语言级别和SDK并不需要一一匹配,但建议选择匹配的级别,这样可以在后续编译代码过程中减少一些没必要的麻烦。

3、设置 Gradle,选择【首选项】-【构建、执行、部署】-【构建工具】-【Gradle】,修改下图红框内的默认内容为下图所示:

用java开发idea插件 官方教程 ideal插件开发_intellij-idea_03

4、创建好后项目目录大概如下图所示(各个配置文件的配置方法会在下一章节中进行详细讲解,本地只是选保证插件可以正常运行):

 

用java开发idea插件 官方教程 ideal插件开发_用java开发idea插件 官方教程_04

【注意事项】:最新版本的idea创建的源码路径是src/main/kotlin,如果用java开发的话只需用重构功能把kotlin改名为java即可。

2、创建第一个Action文件

        ide插件定义的点击事件称为Action,需要继承AnAction类。本例会在Idea的【工具】菜单栏中添加一个名为【通知】的新菜单,点击后以气泡的方式弹出一句提示语。选择【文件】-【新建】-【Plugin DevKit】-【Action】,会显示如下设置页面,熟悉开发后不需要用此向导;

用java开发idea插件 官方教程 ideal插件开发_gradle_05

  • 操作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包,此处可能会执行十几分钟。

用java开发idea插件 官方教程 ideal插件开发_java_06

 2、运行,点击右侧Gradle图标,然后双击【Tasks】-【intellij】-【runIde】,此处会重启一个新的idea窗口专门用于测试插件,支持调试。

用java开发idea插件 官方教程 ideal插件开发_intellij-idea_07

3、测试,稍等几秒会打开一个新的idea做为测试环境(开发的插件会自动安装在新的idea中),新建一个测试project,然后打开【Tools】菜单栏,会看到一个名为【通知】的菜单,点击后会在右下角弹出一句提示,如下图所示:

用java开发idea插件 官方教程 ideal插件开发_用java开发idea插件 官方教程_08

4、本地发布

        另一种测试方式就是本地打包,然后集成到开发的idea, 方法是先打包:

用java开发idea插件 官方教程 ideal插件开发_gradle_09

         再从本地磁盘安装

用java开发idea插件 官方教程 ideal插件开发_plugin_10

        然后重启idea。

三、打包发布插件到应用市场

        发布过程参考官方文档即可:

1、给插件签名

2、发布插件

四、更好的学习插件开发

        下面标红的为重点内容

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