idea 插件开发之 HelloWorld

前言

本文使用的 idea 2023.3 版本进行插件入门开发,首先要说明的是 idea 2023 版本及以后的 idea,对插件开发进行了一定程度的变动:

1、创建项目时不再支持 maven 选项

2、必须是 jdk17 及以后版本(点击查看官网版本对应关系)

3、默认创建的项目是基于 kotlin 的

4、idea 默认没有安装 ”Plugin DevKit“ 插件,需要自己安装

基于以上相关内容,本文创建一个 HelloWorld 级别的 idea 插件。

入门教程

一、安装开发插件

idea 插件开发之 HelloWorld_第1张图片

二、新建 Project

idea 插件开发之 HelloWorld_第2张图片

下面是创建项目后 idea 默认生成的代码结构:

idea 插件开发之 HelloWorld_第3张图片

因为 idea 默认基于 gradle 构建项目,所有工程中不再有 pom.xml 文件。虽然 idea 默认使用 kotlin,但是我想目前阶段大部分开发者应该还是习惯 java 模式,所以需要做一些修改,去除 kotlin 的相关配置。

1、去除 build.gradle.ktssettings.gradle.kts 文件的 .kts 后缀,修改 src/main/kotlin 中的 kotlinjava,修改后的截图如下所示。

idea 插件开发之 HelloWorld_第4张图片

2、build.gradle.kts 文件介绍和修改

这个文件定义了IDEA插件构建时依赖的环境,以及最终支持在哪些环境下面运行插件,因为我们不使用 kotlin,所以我需要进行一些修改。

修改前的内容如下:

// 项目依赖的插件,默认会依赖kotlin,我们使用java来开发插件所以这里依赖我们去掉它
plugins {
    id("java")
    id("org.jetbrains.kotlin.jvm") version "1.9.20"
    id("org.jetbrains.intellij") version "1.16.0"
}
// 插件的一些基本信息,按实际情况填写
group = "com.example"
version = "1.0-SNAPSHOT"
// 依赖的中央仓库配置,这里我们一般是会改为直接去idea官网下载或者使用你的私服等镜像地址
repositories {
    mavenCentral()
}
// 这里是很重要的配置,定义了gradle构建时依赖的idea版本,我们进行插件调试的时候,会使用这里定义的idea版本来进行测试
intellij {
    version.set("2023.1.5")
    type.set("IC") // Target IDE Platform
    plugins.set(listOf(/* Plugin Dependencies */))
}
// 定义构建的任务,主要是改一下编译的jdk版本,插件适用的idea版本,字符编码等信息
tasks {
    // Set the JVM compatibility versions
    withType<JavaCompile> {
        sourceCompatibility = "17"
        targetCompatibility = "17"
    }
    withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
        kotlinOptions.jvmTarget = "17"
    }
    patchPluginXml {
        sinceBuild.set("231")
        untilBuild.set("241.*")
    }
    signPlugin {
        certificateChain.set(System.getenv("CERTIFICATE_CHAIN"))
        privateKey.set(System.getenv("PRIVATE_KEY"))
        password.set(System.getenv("PRIVATE_KEY_PASSWORD"))
    }
    publishPlugin {
        token.set(System.getenv("PUBLISH_TOKEN"))
    }
}

修改后的内容如下:

plugins {
    id("java")
    id("org.jetbrains.intellij") version "1.16.0"
}
group = "com.example"
version = "1.0-SNAPSHOT"
repositories {
    mavenCentral()
}
intellij {
    version = "2023.3"
    type = "IC" // Target IDE Platform
    plugins = [/* Plugin Dependencies */]
    updateSinceUntilBuild = false
}
tasks.withType(JavaCompile.class).configureEach(task -> {
    task.getOptions().setEncoding("UTF-8");
    sourceCompatibility = "17";
    targetCompatibility = "17";
});
tasks.patchPluginXml {
    // 注意这个版本号不能高于上面intellij的version,否则runIde会报错
    sinceBuild.set("231")
    untilBuild.set("241.*")
}
tasks.signPlugin {
    certificateChain.set(System.getenv("CERTIFICATE_CHAIN"))
    privateKey.set(System.getenv("PRIVATE_KEY"))
    password.set(System.getenv("PRIVATE_KEY_PASSWORD"))
}
tasks.publishPlugin {
    token.set(System.getenv("PUBLISH_TOKEN"))
}

修改完成后,点击 Gradle 小图标,确保最终控制台输出 BUILD SUCCESSFUL,通过构建后,右侧的 Gradle 面板就会出现各项 Task 内容,如下图所示:

idea 插件开发之 HelloWorld_第5张图片

3、配置 IntelliJ Platform Plugin SDK

IntelliJ Platform Plugin SDK 就是开发 IntelliJ 平台插件的 SDK,是基于 JDK 之上运行的,类似于开发 Android 应用需要 Android SDK。

导航到 File | Project Structure,选择对话框左侧栏 Platform Settings 下的 SDKs 进行添加操作,如下图所示:

idea 插件开发之 HelloWorld_第6张图片
idea 插件开发之 HelloWorld_第7张图片

idea 插件开发之 HelloWorld_第8张图片

4、配置关联源代码(可选,为了方便查看代码)

idea 插件开发之 HelloWorld_第9张图片

idea 插件开发之 HelloWorld_第10张图片

注意:关联源代码后,idea 下面会有扫描索引的操作,可能会导致你 idea 很卡,这里需要等一会。

三、创建 Action

现在创建一个点击可以弹出 HelloWorld 提示框的一个Action(动作)

idea 插件开发之 HelloWorld_第11张图片
idea 插件开发之 HelloWorld_第12张图片

点击 OK 按钮创建 Action 后,idea 为我们自动创建一个该 Action 动作的 Java 类 和 该插件对应配置,如下图所示:

idea 插件开发之 HelloWorld_第13张图片

接下来我们在 actionPerformed 方法中编写我们这个动作的代码,这里写一段代码使之弹出一个对话框,如下:

public class ShowHelloAction extends AnAction {

    @Override
    public void actionPerformed(AnActionEvent e) {
        String message = "你好,秀一下";
        Messages.showInfoMessage(e.getProject(), message, "标题");

    }
}

四、测试 Action

编写好代码后,我们在右侧 Gracle 中运行或者 Debug运行,稍等一会后就会打开一个新的 idea(这个运行的 idea 对应的版本就是 build.gradle 配置文件中配置的 version 所对应的版本) ,然后我们在这个新打开的 idea 中操作我们刚刚创建的 Action 即可验证效果。

如下图所示:

idea 插件开发之 HelloWorld_第14张图片
idea 插件开发之 HelloWorld_第15张图片
idea 插件开发之 HelloWorld_第16张图片

五、打包插件

插件需要传播和发布,都需要打包,打包后会获得一个 zip 包,你可以分享给其他人安装,或者到 idea 插件市场里上传发布。

执行 buildPlugin 进行打包,观察控制台输出打包成功后,文件会生成到工程的 build/distributions 目录中,如下图所示:

idea 插件开发之 HelloWorld_第17张图片

六、插件校验

因为IDEA版本很多,如果你的插件希望可以被多个 idea 版本兼容的话,那么在你分享给朋友或者发布到 idea 插件市场之前,建议先走一次校验流程。这个校验流程会把所有版本的 idea 自动走一次你的插件(只是校验是否能否正常在各个版本中安装运行)。由于这个版本会校验 idea 版本的兼容性,所以这里的耗时相对来说会比较长,因为它会自动下载各个版本的 idea 去挨个测试,每个版本的 idea 都要大几百上 G 的大小,这里你需要特别注意你的磁盘空间。

执行 Gradle 的 verifyPlugin 任务后慢慢等待直到完全结束。

小结

至此,IDEA插件的第一个 Demo 到此结束。入门的插件开发并不难,有兴趣的话可以从官网或者其他开源的IDEA插件中翻翻代码学习,深入插件开发所需要学习的内容还是非常多的。

你可能感兴趣的:(开发工具,intellij-idea,java)