插件开发的两种方式

使用 IDEA 开发插件有两种方式

  • 通过 IDEA 创建插件项目 - 入门, 无法实现复杂功能
  • 通过 Gradle 进行项目创建 - 进阶

我们选择第一种较为简单的方式,用来入门和了解

插件开发环境配置

首先, IDEA 推荐下载最新版,不然插件可能会存在兼容问题,

另外复杂插件开发,推荐下载 IDEA 社区版 并通过代码启动,由于社区版是开源的,所以方便开发调试,我们入门,版本不做限制,也不需要从源码启动。

创建配置项目

首先,在欢迎界面,新建项目 New Project

ide 怎么开发一个java 如何开发一个idea插件_插件开发


或者从已打开项目中创建新的项目 File - New

ide 怎么开发一个java 如何开发一个idea插件_ide_02


选择 Intellj Platform Plugin ,然后点击选择 SDK

ide 怎么开发一个java 如何开发一个idea插件_ide_03


当前是没有SDK可以选择的,所以我们添加一个插件SDK - 点击 ‘’'Add IntellJ Platform Plugin SDK ',进行添加

ide 怎么开发一个java 如何开发一个idea插件_intellij idea_04


这里位置选择 IDEA 安装路径,点击确定,我试过了其他位置都不能够选择,原因不明

ide 怎么开发一个java 如何开发一个idea插件_xml_05


这里需要选择 SDK 版本,最新版默认只能选择 JDK 11 , 如果有 8 也可以选择,这对于简单插件开发影响不大

ide 怎么开发一个java 如何开发一个idea插件_intellij idea_06


进入下一步,这里的 Groove 和 SQL 支持,看需要勾选,这里选择不勾选

ide 怎么开发一个java 如何开发一个idea插件_xml_07


设置项目名称和路径,点击下一步

ide 怎么开发一个java 如何开发一个idea插件_ide 怎么开发一个java_08


然后等待项目加载完成,加载完成后界面如下主要包含 resources/META-INF/plugin.xmlfirstSimplePlugin.iml 两个文件

ide 怎么开发一个java 如何开发一个idea插件_intellij idea_09


firstSimplePlugin.iml : *.iml是IDEA自动生成的项目结构文件, 这里不做过多解释。

plugin.xml : 是插件的配置文件,参考示例和注释如下

<idea-plugin>
  <!--  唯一标识 自己随便定义  -->
  <id>com.test.plugin</id>
  <!--  插件名称, 不允许包含 plugin 字段  -->
  <name>Hello World</name>
  <!--  版本,默认1.0  -->
  <version>1.0</version>
  <!-- 填写开发人的邮箱,公司名称   -->
  <vendor email="xxx@yourcompany.com" url="https://www.xxxx.com">assember</vendor>

  <description><![CDATA[
      简介: 第一个插件,打印 Hello World,这里 最少40个字符, IDEA 才不会提示 Warning
    ]]></description>

  <change-notes><![CDATA[
      更新说明: 修改了若干问题,更新了一些功能
    ]]>
  </change-notes>

  <!--  表示当前插件所支持的所有Intellij Idea 的版本 -->
  <!-- please see https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html for description -->
  <idea-version since-build="173.0"/>

  <!--  表示当前插件所强制依赖的模块,用于自动兼容性扫描 -->
  <!-- please see https://plugins.jetbrains.com/docs/intellij/plugin-compatibility.html
       on how to target different products -->
  <depends>com.intellij.modules.platform</depends>

  <!--  这里一般会放一些我们自己的扩展的东西,比如新增高亮显示,新增语言支持都是需要在这里进行扩展 -->
  <extensions defaultExtensionNs="com.intellij">
    <!-- Add your extensions here -->
  </extensions>

  <!--  新增的Action类需要在这里注册,用于菜单栏扩展 -->
  <actions>
    <!-- Add your actions here -->
  </actions>

</idea-plugin>

开发插件

从配置文件默认给的两个标签是 extensionsactions中,我们可以看出,这两个是最常用的插件开发功能。

我们对于这两个进行重点介绍

标签

主要用途

actions

添加菜单栏扩展, 菜单栏或者工具栏被选中,都会触发 AnAction 的 actionPerformed()方法

extensions

例如,通过com.intellij.toolWindow 创建左右两侧窗口,官方给出的 扩展列表 包含1216 个扩展工具

其他标签可以参看:
Plugin Configuration File 官方文档

首先,我们先使用 Actions 来进行主菜单扩展

Actions 实现主菜单添加按钮

在 左侧项目结构的 src 文件夹上 - 右键- 新建 -选择 Plugin Devkit - Action

ide 怎么开发一个java 如何开发一个idea插件_xml_10


我们分别设置 id 、name等,Groups 里面分组较多,我们选择比较直观的 Main menu 主菜单,选择在最后显示

ide 怎么开发一个java 如何开发一个idea插件_intellij idea_11


这时,plugin.xml 中会自动添加 actions 属性,但是没法添加分组属性

ide 怎么开发一个java 如何开发一个idea插件_插件开发_12


我们需要修改给他外面套一层 group 不然没法在主菜单显示, 复制以下代码替换 <actions></actions> 标签

<actions>
    <group id="MyPlugin.SampleMenu" text="_Sample Menu" description="Sample menu">
      <add-to-group group-id="MainMenu" anchor="last"  />
      <action id="ShowHelloWorld" class="ShowHelloWorld" text="Welcome use plugin" description="This is a test plugin" />
    </group>
  </actions>

同时,生成实现类和重写 action 相应方法

ide 怎么开发一个java 如何开发一个idea插件_ide_13


添加菜单点击后的响应事件

@Override
    public void actionPerformed(AnActionEvent e) {
        // 获取项目信息,就是当前打开的项目信息,弹窗需要使用
        Project project = e.getData(PlatformDataKeys.PROJECT);
        // 展示输入框,提示输入名称,并获取名称
        String username= Messages.showInputDialog(project, "你的名称是?", "输入你的名称", Messages.getQuestionIcon());
        // 获取并展示欢迎语
        Messages.showMessageDialog(project, "Hi, " + username+ "!\n Hello world.", "Information", Messages.getInformationIcon());
    }

点击右上角运行

ide 怎么开发一个java 如何开发一个idea插件_intellij idea_14


运行后会再次启动一个 IDEA 展示你的插件,我们可以看到我们的菜单已经添加成功

ide 怎么开发一个java 如何开发一个idea插件_xml_15


这里展示的分组是 group text =“Sample Menu”, 子菜单是我们的 action text = “Welcome use plugin”

ide 怎么开发一个java 如何开发一个idea插件_xml_16


点击后,按照我们的响应事件进行处理

ide 怎么开发一个java 如何开发一个idea插件_ide 怎么开发一个java_17


ide 怎么开发一个java 如何开发一个idea插件_插件开发_18


打开插件列表 File - Settings - Plugins,就可以看到我们的插件了

ide 怎么开发一个java 如何开发一个idea插件_ide 怎么开发一个java_19


完善之后,可以通过打包或者上传应用市场,提供给其他人使用

ide 怎么开发一个java 如何开发一个idea插件_插件开发_20

结语

至此,一个简单的插件就已经完成了,我们完成了基于 actions 的插件开发,更多的功能可以参看 actions官方文档

除了可以实现弹窗,例如,也可以将菜单加在文本编辑器的右键中,获取文本编辑器中当前选中的文本,然后可以实现高亮,格式化等自定义操作。

更多的功能,可以慢慢的进行探索

参考资料

  • 从零开始编写IntelliJ IDEA插件
  • IntelliJ Platform Plugin SDK