idea插件开发[2]-自定义一个插件

上次已经聊过怎么准备idea插件开发的环境了,现在新建一个demo项目,用来简单的测试环境

如果环境有问题,看看上一篇文章看能不能有帮助,如果还是不行,欢迎私信.

1.新建一个idea plugin项目

新建项目很简单,跟创建一个gradle项目一致,只需要勾选IntelliJ平台插件的库即可

只需要注意一点,这里的项目SDK需要选择自己前面准备的插件开发SDK的版本一致的版本

填写对应的项目信息,点击完成即可

2.构建项目

创建成功后会进入开发界面,此时idea会构建项目.

如果是第一次构建,可能会有几个比较大的依赖下载起来会比较慢,如果不着急的话,就静静等待; 如果是网速不好,下载超时的话,还有其他的解救方案,如下做个简单的介绍:

2.1 设置gradle国内镜像加速

这个是很有必要的,设置镜像加速以后,依赖下载速度会很大的提高.

具体的方法有两种:

方法一:当前项目生效

在项目于的build.gradle中的repositories下添加如下配置即可:

repositories {
    maven {
        url "http://maven.aliyun.com/nexus/content/groups/public"
    }
}
复制代码

方法二:全局生效
如果想要全局生效,需要在gradle的目录下,添加配置.

首先找到gradle的目录,一般都在用户根目录下(如果不是的话,可以全局搜一下),例如我的是C:\Users\admin.gradle;

然后进入到.gradle目录,新建一个init.gradle文件(如果有的话,直接在里面追加),添加如下内容:

allprojects {
    repositories {
        maven {
            url "http://maven.aliyun.com/nexus/content/groups/public"
        }
    }
}
复制代码

这样,镜像加速就设置好了

2.2 手动下载依赖文件

因为有几个依赖确实很大,且下载速度很慢,如果网速可以的话,只需要设置了镜像加速,等等也就构建好了,如果网速不行的话,可以使用手动下载文件后构建.
主要遇到的几个比较大的文件如下:

gradle-x.x-bin文件手动下载:

gradle-x.x-bin是构建时第一个比较大的需要下载的文件, 可能下载会比较慢,这时我们可以做如下操作:

先停止idea的自动构建,

然后进入到.gradle\wrapper\dists文件夹看看,有没有gradle-x.x-bin或者gradle-x.x-all格式的文件夹,

如果没有的话,在你新建项目的项目文件夹中,有build.gradle的目录执行下述构建命令,直到.gradle\wrapper\dists文件夹中出现gradle-x.x-bin或者gradle-x.x-all格式的文件夹,停止命令的执行

gradle build
复制代码

当.gradle\wrapper\dists文件夹中出现gradle-x.x-bin或者gradle-x.x-all格式的文件夹时,进入文件夹,此时会有类似"efvqh8uyq79v2n7rcncuhu9sv"这样编码过的格式的文件夹,再进入,删除里面的所有文件

通过分享网址下载与文件夹对应的zip包(一定要下载对应的包),下载完成后复制进刚刚删除文件的文件夹

再构建项目,发现已经跳过了gradle-x.x-bin文件的下载了

ideaIC文件手动下载:

ideaIC是另一个比较慢的依赖,只要有两个文件夹里的东西需要手动下载:

.gradle\caches\modules-2\files-2.1\com.jetbrains.intellij.idea\ideaIC

.gradle\caches\modules-2\metadata-2.96\descriptors\com.jetbrains.intellij.idea\ideaIC

这个文件夹需要的文件在网上没有找到下载源,我这边有2020.3.2版本的,如果需要的话,可以私聊我,后续我会上传上去后,更新2020.3.2版本的下载链接; 但如果是其他版本的,就需要慢慢等着下载了

3.配置plugin.xml文件

以下是个示例

<idea-plugin>
    <id>com.xyz.demo</id>
    <name>配置1:插件的名字</name>
    <vendor email="xxx@163.com" url="http://www.xxx.com">你的公司\姓名</vendor>

    <description><![CDATA[
    这个是整个项目的描述.<br>
    <em>这里面用来介绍你的插件的功能</em>
    <em>这里面支持标准的HTML标签</em>
    ]]></description>

    <!-- please see https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
         on how to target different products -->
    <depends>com.intellij.modules.platform</depends>

    <extensions defaultExtensionNs="com.intellij">
        <!-- 在此处添加扩展 -->
    </extensions>
    
    <change-notes><![CDATA[
    这个是整个项目的版本更新记录,不强制存在.<br>
    <em>如果要使用该标签,需要把build.gradle文件中的patchPluginXml标签中默认添加的内容删除</em>
    <em>这里面支持标准的HTML标签</em>
    ]]></change-notes>

    <actions>
        <!-- 在此处添加您的操作 -->
    </actions>
</idea-plugin>
复制代码

4.一个demo Action

在项目中选择适当的包,新建java文件来完成一个操作,idea对于新建idea插件操作有可视化的创建方式,步骤如下:

然后填写对应的信息,选择需要添加到的母菜单项,然后设置快捷键(可选),点击确定即可

此时,可以看到一个Java文件已经新建出来了,实现了AnAction类,有一个actionPerformed方法需要实现,这个方法就是我们触发了插件的操作以后,实现逻辑的方法

此外,在plugin.xml中也自动添加了对应的action的配置

<actions>
        <!-- 在此处添加您的操作 -->
        <action id="xxx.DemoAction" class="com.xxx.action.DemoAction" text="DemoAction" description="测试操作">
            <add-to-group group-id="ToolsMenu" anchor="first"/>
            <keyboard-shortcut keymap="$default" first-keystroke="shift D"/>
        </action>
</actions>
复制代码

再实现actionPerformed方法,就可以做一个简单的测试了

@Override
public void actionPerformed(AnActionEvent e) {
	//弹出一个文本框,Messages.getInformationIcon()是获取一个图标icon,可以是自定义的图标
	Messages.showMessageDialog("测试弹出框内容", "弹出框标题", Messages.getInformationIcon());
}
复制代码

5.运行插件

插件的运行和普通的项目运行一样,idea会默认的配置来运行这个插件,只需要点击运行即可

点击运行以后,会弹出一个新的idea(第一次较慢)

查看新弹出的idea项目plugin配置,会发现我们自定义的插件已经安装

随便新建或者打开一个项目,便可以测试我们自定义的插件



这是一个用来测试环境的idea插件项目的demo,能够弹出测试弹窗说明我们已经可以进行插件开发了

而在插件开发过程中,还会遇到很多的问题,例如action的配置 Action的母菜单的选择等等

在开发一个实际可用的插件时,还需要了解插件开发的一些API

这些在下一篇更新里分享