idea插件编写

Posted justry_deng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了idea插件编写相关的知识,希望对你有一定的参考价值。

idea插件编写


准备工作:添加对应版本的JDK

编写插件时,不同版本的IntelliJ IDEA,对JDK的版本要求不同。本人使用的是2021版本的IntelliJ IDEA进行的插件编写,需要设置JDK11


编写插件

第一步:创建IntelliJ Platform Plugin项目



第二步:配置plugin.xml,填写基本信息

<idea-plugin>
    <!-- 插件唯一id,不能和其他插件id重复 -->
    <id>com.idea-aedi.plugin</id>

    <!-- 插件名称(在插件市场搜索插件时,搜索的就是这个名称) -->
    <name>JustryDeng</name>

    <!-- 版本号 -->
    <version>1.0</version>

    <!-- 供应商主页和email -->
    <vendor email="13548417409@163.com" url="https://gitee.com/JustryDeng/projects"/>

    <!-- 插件描述,支持html标签 -->
    <description><![CDATA[
        JustryDeng common plugin, Welcome to use.
        ]]></description>

    <!-- 插件版本变更信息,支持HTML标签; 将展示在 settings | Plugins 对话框和插件仓库的Web页面 -->
    <change-notes><![CDATA[
        <ul>
            <li>since 2021-12-11</li>
        </ul>
        ]]></change-notes>

    <!--
        插件兼容IDEA的最大和最小 build 号,两个属性可以任选一个或者同时使用,
        please see https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html for description
    -->
    <idea-version since-build="173.0"/>

    <!-- 插件所依赖的其他插件的id -->
    <depends>com.intellij.modules.platform</depends>
    <depends>com.intellij.modules.lang</depends>
    <depends>com.intellij.modules.java</depends>
 
    <extensions defaultExtensionNs="com.intellij">
        <!-- Add your extensions here -->
    </extensions>

    <actions>
        <!--
            !!!!!! 这部分内容需要在下面的步骤中配置(手动配置、或借助插件开发助手自动配置) !!!!!!
        -->
    </actions>

</idea-plugin>

第三步:编写插件、配置插件

方式一:完全手动

  • 第一步:编写想要实现的功能类,需要继承com.intellij.openapi.actionSystem.AnAction

    import com.intellij.openapi.actionSystem.AnAction;
    import com.intellij.openapi.actionSystem.AnActionEvent;
    import com.intellij.openapi.actionSystem.PlatformDataKeys;
    import com.intellij.openapi.project.Project;
    import com.intellij.openapi.ui.Messages;
    
    public class HelloAction extends AnAction 
        
        @Override
        public void actionPerformed(AnActionEvent event) 
            // your logic
            Project project = event.getData(PlatformDataKeys.PROJECT);
            String txt= Messages.showInputDialog(project, "What is your name?", "Question", Messages.getQuestionIcon());
            Messages.showMessageDialog(project, "Hello, " + txt + "!\\nI am glad to see you.", "Information", Messages.getInformationIcon());
        
    
    
  • 第二步:配置plugin.xml中的actions`

    提示:为了示例的多样性,这里给出两个配置示例

    <!-- 
        提示:action标签和group标签的id字段值自取即可
     -->
    <actions>
        <!--
            示例一:在MainMenu菜单下的HelpMenu菜单里,最前面增加一个叫'Hello'的按钮
        -->
        <action id="com.idea-aedi.plugin.Hello" class="com.example.ideaplugin.HelloAction" text="Hello"
                description="Say hello.">
            <!--  指定父节点 action 或 action group 被添加到的位置 -->
            <add-to-group group-id="HelpMenu" anchor="first"/>
        </action>
    
        <!--
            示例二:在MainMenu菜单的最后面,增加一个 叫'JustryDeng'的菜单,其中字母J带下划线
        -->
        <group id="com.idea-aedi.plugin.JustryDeng" text="_JustryDeng" description="JustryDeng's common util.">
            <!--  指定父节点 action 或 action group 被添加到的位置 -->
            <add-to-group group-id="MainMenu" anchor="last"/>
            <!-- 当前菜单下,再添加一个叫'Say Hey'的按钮,其中字母S带下划线 (注:当然还可以嵌套菜单) -->
            <action id="com.idea-aedi.plugin.JustryDeng.Hello" class="com.example.ideaplugin.HelloAction" text="Say _Hello" description="Say hello."/>
        </group>
    </actions>
    

方式二:借助IDEA插件开发助手IDEA Plugin DevKit Helper,半自动

插件开发助手,可以在帮助我们快速创建Action并在plugin.xml中作对应的配置,而不需要我们手动配置。

  • 第一步:安装IDEA插件开发助手IDEA Plugin DevKit Helper

  • 第二步:使用插件开发助手创建Action

其中设置插件位置处里,Action代表一个"按钮",Group代表菜单,Group里可能有多个Action;先选择一个Group或者一个Action,然后选择Anchor位置,即可通过相对位置的方式,将插件的位置确定下来了。比如说需要将按钮设置在Help菜单的最上面:

点击OK,插件开发助手就会创建对应名字的AnAction类,同时会将新按钮的信息(按钮id、AnAction类、按钮名称、描述、位置等信息)添加进plugin.xml中的actions标签里。

  • 第三步:在生成的AnAction类中编写逻辑

    import com.intellij.openapi.actionSystem.AnAction;
    import com.intellij.openapi.actionSystem.AnActionEvent;
    import com.intellij.openapi.actionSystem.PlatformDataKeys;
    import com.intellij.openapi.project.Project;
    import com.intellij.openapi.ui.Messages;
    
    public class HelloAction extends AnAction 
        
        @Override
        public void actionPerformed(AnActionEvent event) 
            // your logic
            Project project = event.getData(PlatformDataKeys.PROJECT);
            String txt= Messages.showInputDialog(project, "What is your name?", "Question", Messages.getQuestionIcon());
            Messages.showMessageDialog(project, "Hello, " + txt + "!\\nI am glad to see you.", "Information", Messages.getInformationIcon());
        
    
    

常用group-id说明

  • MainMenu:主菜单

  • CutCopyPasteGroup:左侧导航栏菜单

  • EditorPopupMenu:右侧代码栏菜单

  • GenerateGroup:按alt + insert时弹出的菜单栏

第四步:运行、调试插件

运行插件时,会新打开一个idea:

测试一下功能,也是OK的:

第五步(可选):引入依赖

在我们实际开发idea插件过程中,可能还会需要其它的依赖,这时可采用官方推荐的gradle创建idea插件的方式,但是会略显麻烦;简单的,你可以直接将依赖的lib包as library引入进当前项目即可:

检查一下:

第六步:打包插件

注:如果项目有依赖其它jar包,那么打出来的就不是jar包,而是zip包了。

第七步:安装插件

如果插件有发布到插件市场,那么可以直接在线从插件市场安装;如果插件没有发布到插件市,那么可以采用下面这种从磁盘安装的方式进行安装。

打开File | Settings | Plugins,选择从磁盘安装:

选中插件包后,可看到:

点击OKApply重启idea完成安装

相关补充

idea如何打开一个现有的插件项目

  • 问题所在

    如果你使用idea直接打开一个plugin项目,那么可能是这样的(没有被idea认出来是插件项目):

    而实际的插件项目是这样的(有被idea认出来是插件项目):

  • 解决办法

    直接修改项目的.iml文件:

    将type修改为PLUGIN_MODULE,并通过增加<component name="DevKit.ModuleBuildProperties" url="file://$MODULE_DIR$/resources/META-INF/plugin.xml" />来指定plugin.xml的位置:

    修改前:

    修改后:

    此时,再观察项目,会发现idea已经识别出是插件项目了:

发布插件到插件市场(手动发布)

提示:如果使用的gradle编写构建的插件,那么可以使用gradle集成的能力,自动将插件发布到插件市场,而不需要手动发布。

  • 第一步:访问https://plugins.jetbrains.com/

  • 第二步:登录(支持多种方式登录,本人常用Github登录)

  • 第三步:上传插件

  • 第四步:等审核通过后,就可以在插件市场搜索到你的插件了


相关资料

以上是关于idea插件编写的主要内容,如果未能解决你的问题,请参考以下文章

IDEA FreeMyBatis插件上手

如何在IntelliJ IDEA中使用.ignore插件忽略不必要提交的文件

如何在IntelliJ IDEA中使用.ignore插件忽略不必要提交的文件

如何在IntelliJ IDEA中使用.ignore插件忽略不必要提交的文件

从零开始编写IntelliJ IDEA插件

如何在IntelliJ IDEA中使用.ignore插件忽略不必要提交的文件