插件开发的两种方式
使用 IDEA 开发插件有两种方式
- 通过 IDEA 创建插件项目 - 入门, 无法实现复杂功能
- 通过 Gradle 进行项目创建 - 进阶
我们选择第一种较为简单的方式,用来入门和了解
插件开发环境配置
首先, IDEA 推荐下载最新版,不然插件可能会存在兼容问题,
另外复杂插件开发,推荐下载 IDEA 社区版 并通过代码启动,由于社区版是开源的,所以方便开发调试,我们入门,版本不做限制,也不需要从源码启动。
创建配置项目
首先,在欢迎界面,新建项目 New Project
或者从已打开项目中创建新的项目 File - New
选择 Intellj Platform Plugin ,然后点击选择 SDK
当前是没有SDK可以选择的,所以我们添加一个插件SDK - 点击 ‘’'Add IntellJ Platform Plugin SDK ',进行添加
这里位置选择 IDEA 安装路径,点击确定,我试过了其他位置都不能够选择,原因不明
这里需要选择 SDK 版本,最新版默认只能选择 JDK 11 , 如果有 8 也可以选择,这对于简单插件开发影响不大
进入下一步,这里的 Groove 和 SQL 支持,看需要勾选,这里选择不勾选
设置项目名称和路径,点击下一步
然后等待项目加载完成,加载完成后界面如下主要包含 resources/META-INF/plugin.xml
和 firstSimplePlugin.iml
两个文件
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>
开发插件
从配置文件默认给的两个标签是 extensions
和 actions
中,我们可以看出,这两个是最常用的插件开发功能。
我们对于这两个进行重点介绍
标签 | 主要用途 |
actions | 添加菜单栏扩展, 菜单栏或者工具栏被选中,都会触发 AnAction 的 actionPerformed()方法 |
extensions | 例如,通过com.intellij.toolWindow 创建左右两侧窗口,官方给出的 扩展列表 包含1216 个扩展工具 |
其他标签可以参看:
Plugin Configuration File 官方文档
首先,我们先使用 Actions 来进行主菜单扩展
Actions 实现主菜单添加按钮
在 左侧项目结构的 src 文件夹上 - 右键- 新建 -选择 Plugin Devkit - Action
我们分别设置 id 、name等,Groups 里面分组较多,我们选择比较直观的 Main menu 主菜单,选择在最后显示
这时,plugin.xml
中会自动添加 actions 属性,但是没法添加分组属性
我们需要修改给他外面套一层 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 相应方法
添加菜单点击后的响应事件
@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());
}
点击右上角运行
运行后会再次启动一个 IDEA 展示你的插件,我们可以看到我们的菜单已经添加成功
这里展示的分组是 group text =“Sample Menu”, 子菜单是我们的 action text = “Welcome use plugin”
点击后,按照我们的响应事件进行处理
打开插件列表 File - Settings - Plugins,就可以看到我们的插件了
完善之后,可以通过打包或者上传应用市场,提供给其他人使用
结语
至此,一个简单的插件就已经完成了,我们完成了基于 actions 的插件开发,更多的功能可以参看 actions官方文档。
除了可以实现弹窗,例如,也可以将菜单加在文本编辑器的右键中,获取文本编辑器中当前选中的文本,然后可以实现高亮,格式化等自定义操作。
更多的功能,可以慢慢的进行探索
参考资料
- 从零开始编写IntelliJ IDEA插件
- IntelliJ Platform Plugin SDK