IDEA插件开发 - 01 - 第一个IDEA插件

742 阅读3分钟

本文概要

  1. Java 环境
  2. gradle安装
  3. 第一个IDEA插件开发
  4. 总结

1. Java 环境

自行安装 jdk 11 Java 环境。

2. gradle安装

依据 IDEA 插件开发官方文档,gradle是创建 IntelliJ 平台插件的首选解决方案。 gradle安装网上有很多的示例,在此不在赘述,此处贴上一个windows安装gradle教程,其他操作系统参考或者自行搜索。

3. 第一个IDEA插件开发

gradle安装完毕就可以开始开发我们的插件啦。

step.1 新建项目

  1. 官方2020 年 9 月 18 日提示,IntelliJ 项目的源代码最近迁移到了 Java 11。所以基于 IntelliJ 的 IDE 的 2020.3 版本的所有插件都需要 Java 11 才能启动。官方提示博客链接
  2. Java 环境勾选。
  3. IntelliJ Platform Plugin 插件需要勾选,个人理解为 IDEA 插件开发的 SDK,只不过是通过 Gradle 管理的。
  4. next
  5. 项目名
  6. finish

step.2 项目结构

plugin-demo01
├── build.gradle
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │   ├── java
    │   └── resources
    │       └── META-INF
    │           └── plugin.xml
  1. build.gradle: 默认的 IntelliJ 平台build.gradle文件
plugins {
    id 'java'
    id 'org.jetbrains.intellij' version '1.5.3'
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

// See https://github.com/JetBrains/gradle-intellij-plugin/
intellij {
    version '2020.2.3'
}
patchPluginXml {
    changeNotes """
      Add change notes here.<br>
      <em>most HTML tags may be used</em>"""
}

说明:

  • plugins 申明了两个gradle插件:Gradle Java插件 & gradle -intellij-plugin
  • group: gradle 的 GroupId 值
  • version: gradle 的 版本值
  • repositories: gradle 仓库
  • dependencies: gradle 依赖
  • 文件中唯一的注释是指向 gradle-intellij-plugin 的 README.md 的链接,这是其配置 DSL 的参考。
  • Setup DSL 属性的值 intellij.version 指定用于构建插件的 IntelliJ 平台的版本。它默认为用于运行新建项目向导的 IntelliJ IDEA 版本。
  • Patching DSL 属性的 patchPluginXml.changeNotes 值设置为占位符文本。
  1. Gradle Wrapper 文件 Gradle Wrapper 文件,特别是gradle-wrapper.properties文件,它指定了用于构建插件的 Gradle 版本。如果需要,IntelliJ IDEA Gradle 插件会下载此文件中指定的 Gradle 版本。

  2. settings.gradle rootProject.name 配置了项目名。

  3. plugin.xml 插件配置文件,具体后面再描述。

step.3 修改配置文件 plugin.xml

<idea-plugin>
    <id>org.example.plugin-demo01</id>
    <name>demo01</name>
    <vendor email="abc@qq.com" url="http://www.zheteng.icu">none</vendor>

    <description><![CDATA[ Enter short description for your plugin here ]]></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 -->
    </actions>
</idea-plugin>
  1. 修改 name,配置成插件名称
  2. 配置 e-mail 和官网地址以及公司名。
  3. description 功能简介

step.4 创建一个工具窗口ToolWindow

  1. 创建 ToolWindowFactory 并重写 createToolWindowContent 方法
package icu.zhenteng;

import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowFactory;
import org.jetbrains.annotations.NotNull;

/**
 * @author yangpeng
 * @version 1.0.0
 * @date 2022年05月19日
 */
public class MyToolWindowFactory implements ToolWindowFactory {
    @Override
    public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) {

    }
}
  1. 创建 ToolWindow

点击 OK 即创建一个 GUI Form

  1. 命名默认 JPanel

  2. 绘制 "Hello World"

  1. 重写 MyToolWindow 方法
package icu.zhenteng;

import com.intellij.openapi.wm.ToolWindow;

import javax.swing.*;

/**
 * @author yangpeng
 * @version 1.0.0
 * @date 2022年05月19日
 */
public class MyToolWindow {
    private JPanel rootPanel;
    private JTextPane helloWorldTextPane;

    public MyToolWindow(ToolWindow toolWindow){

    }

    public JPanel getContent(){
        return rootPanel;
    }
}
  1. 重写 ToolWindowFactory.createToolWindowContent 方法
@Override
public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) {
    MyToolWindow myToolWindow = new MyToolWindow(toolWindow);
    ContentFactory contentFactory = ContentFactory.SERVICE.getInstance();
    Content content = contentFactory.createContent(myToolWindow.getContent(), "", false);
    toolWindow.getContentManager().addContent(content);
}
  1. 在 plugin.xml 中注册 ToolWindow
<extensions defaultExtensionNs="com.intellij">
        <toolWindow factoryClass="icu.zhenteng.MyToolWindowFactory" id="hello"/>
    </extensions>

step.5 运行插件

4. 总结

IDEA 个人开发插件是觉得写接口文档非常的麻烦,所以想通过自己开发插件将 javadoc 文档转化成接口文档,免去手写文档的痛苦。其实 github 上已经有好多个非常不错的文档生成插件,只是自己也想学习插件的开发,所以就有了这个文章。

本文参考

  1. intellij doc