自定义 idea 插件开发

2,190 阅读1分钟

序言

工欲善其事,必先利其器 使用idea系列开发软件时,多多少少都会使用到一些便利的插件,今天让我们来学习一下如何自己开发一款适合自己的开发环境的插件。

创建项目

首先要创建一个插件的工程,两种选择: 一: image.png 二:推荐第二种gradle方式 image.png 第二种gradle方式可以使用gradle进行打包等操作

等待项目创建完成后生成该目录即可开始进行插件开发: image.png

项目开发

新建一个action入口: image.png 弹窗选择你想要开始的入口action image.png 在plugin.xml文件中就自动生成了注册信息

<actions>
    <!-- Add your actions here -->
    <action id="MainToolAction" class="com.mrlsm.tool.MainToolAction" text="主入口" description="主入口描述">
        <add-to-group group-id="ToolsMenu" anchor="first"/>
        <keyboard-shortcut keymap="$default" first-keystroke="shift ctrl alt T"/>
    </action>
</actions>

在所对应的action类中可以获取idea的动作信息

public class MainToolAction extends AnAction {

    @Override
    public void actionPerformed(AnActionEvent e) {

        // 从 此事件 的 上下文 中获取的动作。
        Project project = e.getProject();

        //返回 上下文,该 上下文 允许检索有关与动作调用(活动编辑器,选择等)有关的IDEA状态的信息。
        DataContext context = e.getDataContext();

        // 显示消息弹窗
        String title = "消息弹窗";
        String msg = "内容为:";
        if (project != null) {
            msg += project.getBasePath() + project.getName();
        }
        Messages.showMessageDialog(msg, title, Messages.getInformationIcon());
    }
}

如果想使用自己定制的内容如何处理,就可以使用自定义的视图 image.png 创建一个dialog模板 或者 空的JPanel视图 image.png idea会自动帮你创建一个集成JDialog的弹窗类与与之对应的from文件 image.png 在相应UI上可以进行点击的操作创建相应的listener image.png 对应的生成的代码为:

buttonOK.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
    		// ok 按钮点击的相应操作
    }
});

项目安装发布

运行:

  1. 可以直接运行,会打开一个新的初始化的idea
  2. 在gradle中进行编译

image.png 在build目录下生成可以直接拖拽安装的工具包 image.png 拖拽安装 image.png Restart 即可完成插件的安装 查看插件 image.png 上面就是创建一个idea插件所对应项目创建的简单操作。 ​

问题集合

  1. 编译时可能会出现 错误: 编码GBK的不可映射字符

在build.gradle文件中增加utf-8的编码方式 image.png

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}
  1. group的使用。图标显示、快捷键显示等

image.png 在plugin.xml文件中

<actions>
    <!-- Add your actions here -->
    <action popup="true" id="QrCodeToolAction" class="com.mrlsm.tool.action.QrCodeToolAction" text="二维码工具"
            description="二维码工具">
        <!--快捷键声明-->
        <keyboard-shortcut keymap="$default"
                           first-keystroke="shift ctrl alt Q"/>
    </action>
    <action popup="true" id="Base64EncodeAndDecodeAction" class="com.mrlsm.tool.action.Base64EncodeAndDecodeAction"
            text="Base64编解码"
            description="Base64编解码"/>
    <action popup="true" id="DateTimestampAction" class="com.mrlsm.tool.action.DateTimestampAction" text="日期时间戳"
            description="日期时间戳"/>
    <group popup="true" id="ToolBoxMenu" text="ToolBox" icon="/icons/toolbox.png">
        <reference ref="QrCodeToolAction"/>
        <reference ref="Base64EncodeAndDecodeAction"/>
        <!--分隔符-->
        <separator/>
        <reference ref="DateTimestampAction"/>
        <add-to-group group-id="ToolsMenu" anchor="first"/>
    </group>
</actions>

备注

插件开发详细内容可查看plugins.jetbrains.com