01-新建一个基于 Gradle 的插件项目

这里我们基于 Gradle 进行插件开发,这也是 IntelliJ 官方的推荐的插件开发解决方案。

第一步,选择 Gradle 项目类型并勾选上相应的依赖。

idea 中 【New Project】=》【gradle 项目】=》依赖添加【java + Intelij Platform Plugin】

依赖

第二步,填写项目相关的属性比如 GroupId、ArtifactId。

GroupId: com.github.houbb
ArtifactId: my-first-idea-plugin

第三步,静静等待项目下载相关依赖。

第一次创建 IDEA 插件项目的话,这一步会比较慢。因为要下载 IDEA 插件开发所需的 SDK 。

02 插件项目结构概览

新建完成的项目结构如下图所示。

插件项目结构概览

文件介绍

build/  build.gradle  gradle/  gradle.properties  LICENSE  README.md  settings.gradle  src/

settings.gradle

rootProject.name = 'my-first-idea-plugin'

build.gradle

项目依赖配置文件。通过它可以配置项目第三方依赖、插件版本、插件版本更新记录等信息。

plugins {
    id 'java'
    id 'org.jetbrains.intellij' version '0.4.14'
    id 'org.jetbrains.kotlin.jvm' version '1.3.72'
}

apply plugin: "java"
apply plugin: 'org.jetbrains.intellij'
apply plugin: 'kotlin'

group 'com.github.houbb'
version '3.3.1'

repositories {
    mavenCentral()
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

// See https://github.com/JetBrains/gradle-intellij-plugin/
intellij {
    plugins = ['Kotlin']
//    plugins 'java'
    version '2018.1'
    pluginName 'my-first-idea-plugin'
    updateSinceUntilBuild false
}

dependencies {
    implementation 'com.alibaba.fastjson2:fastjson2:2.0.21'
}

//配置编码格式
tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}


task fatJar(type: Jar) {
    manifest.from jar.manifest
    classifier = 'all'
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    with jar
}

gradle-wrapper.properties

\my-first-idea-plugin\gradle 下的配置文件

#Thu Sep 05 00:21:33 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-all.zip

my-first-idea-plugin\src\main\resources\META-INF\plugin.xml

plugin.xml: 插件的核心配置文件。通过它可以配置插件名称、插件介绍、插件作者信息、Action 等信息。

<idea-plugin>
    <id>com.github.houbb.my-first-idea-plugin</id>
    <name>Plugin display name here</name>
    <vendor email="support@yourcompany.com" url="http://www.yourcompany.com">YourCompany</vendor>

    <description><![CDATA[
    Enter short description for your plugin here.<br>
    <em>most HTML tags may be used</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">
        <!-- Add your extensions here -->
    </extensions>

    <actions>
        <!-- Add your actions here -->
        <action id="hello" class="HelloAction" text="Hello" description="idea 入门插件">
        <!--    指定插件的位置-->
            <add-to-group group-id="ToolsMenu" anchor="first"/>
        </action>
    </actions>
</idea-plugin>

03 手动创建 Action

我们可以把 Action 看作是 IDEA 提供的事件响应处理器,通过 Action 我们可以自定义一些事件处理逻辑/动作。比如说你点击某个菜单的时候,我们进行一个展示对话框的操作。

第一步,右键 java 目录并选择 new 一个 Action

【New】=》【Plugin Devkit】=》【Action】

action

第二步,配置 Action 相关信息比如展示名称。

相关信息

创建效果

创建完成之后,我们的 plugin.xml 的 <actions> 节点下会自动生成我们刚刚创建的 Action 信息:

<actions>
    <!-- Add your actions here -->
    <action id="hello" class="HelloAction" text="Hello" description="idea 入门插件">
    <!--    指定插件的位置-->
        <add-to-group group-id="ToolsMenu" anchor="first"/>
    </action>
</actions>

并且 java 目录下会生成一个叫做 HelloAction 的类。

这个类继承了 AnAction ,并覆盖了 actionPerformed() 方法。

这个 actionPerformed 方法就好比 JS 中的 onClick 方法,会在你点击的时候触发对应的动作。

我简单对 actionPerformed 方法进行了修改,添加了一行代码。这行代码很简单,就是显示 1 个对话框并展示一些信息。

public class HelloAction extends AnAction {

    @Override
    public void actionPerformed(AnActionEvent e) {
        //显示对话框并展示对应的信息
        Messages.showInfoMessage("素材不够,插件来凑!", "Hello");
    }

}

归属位置

另外,我们上面也说了,每个动作都会归属到一个 Group 中,这个 Group 可以简单看作 IDEA 中已经存在的菜单。

举个例子。我上面创建的 Action 的所属 Group 是 ToolsMenu(Tools) 。

这样的话,我们创建的 Action 所在的位置就在 Tools 这个菜单下。

位置

04 验收成果

点击 Gradle -> Tasks -> intellij -> runIde 就会启动一个默认了这个插件的 IDEA。

然后,你可以在这个 IDEA 上实际使用这个插件了。

验收成果

效果如下:

效果如下

PS: 我们的是放在 Tools 下面。

05 打包分发

插件写好之后,如果我们想把插件分享给小伙伴使用的话要怎么做呢。

打包

首先,我们要打包插件 执行 Gradle -> Tasks -> intellij -> buildPlugin

执行完成后,项目中会生成一个 build 文件夹,点击进入后找到 distributions 文件夹,里面会出现一个 .zip 结尾的压缩包,里面打包了插件所需要的依赖、配置文件等。

分发

其次,分发插件

打开 IDEA,在 Settings -> Plugins -> 点击小齿轮后选择 Install Plugin From Disk

最后,提交至官网

这步并不是必须的,如果你想把你的插件发布到官网上,别人直接可以在 应用市场 中搜到你的插件的话可以做这步。

参考资料

https://github.com/CodingDocs/awesome-idea/blob/main/docs/tips/plug-in-development-intro.md

8条经验轻松上手IDEA插件开发

IDEA 插件开发入门教程