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

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

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

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

依赖

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

  [plaintext]
1
2
GroupId: com.github.houbb ArtifactId: my-first-idea-plugin

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

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

02 插件项目结构概览

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

插件项目结构概览

文件介绍

  [plaintext]
1
build/ build.gradle gradle/ gradle.properties LICENSE README.md settings.gradle src/

settings.gradle

  [plaintext]
1
rootProject.name = 'my-first-idea-plugin'

build.gradle

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

  [js]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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 下的配置文件

  [properties]
1
2
3
4
5
6
#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 等信息。

  [xml]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<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 信息:

  [xml]
1
2
3
4
5
6
7
<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 个对话框并展示一些信息。

  [java]
1
2
3
4
5
6
7
8
9
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 插件开发入门教程