最近想接触idea插件开发相关的内容,但发现网上很多文章都比较过时了,并不适用于高版本的idea和jdk,踩了一些坑后,写一篇文章总结一下高版本idea开发插件的步骤吧。
开发环境
-
软件版本:JetBrain IDEA 2024.01
-
JDK版本:JDK17
需要注意的是,从IDEA2022.2开始,就要求用户必须要有Java17及以上的版本才可以进行插件的开发。如果你不清楚自己的idea做插件开发所要求的最低jdk版本,可以参考官网文档的介绍:IDEA版本和JDK版本的对应关系,需要注意的是,如果只是做普通开发的话,那么并没有对idea的版本要求,按实际项目来就行。
步骤1、安装Plugin Devkit
步骤2、新建插件项目
步骤3、打开项目
我们可以看到,项目刚创建出来的时候,并没有我们熟悉的pom.xml
文件,这是因为idea已经默认采用gradle
来作为项目构建工具了,如果想要切换成maven来构建项目的话,按官网的说法也是可以的,但这里暂且不说。笔者大概看了一下,如果不涉及比较复杂的开发的话,项目中自带的构建脚本还是可以看得懂的。
<!-- Plugin Configuration File. Read more: https://plugins.jetbrains.com/docs/intellij/plugin-configuration-file.html -->
<idea-plugin>
<!-- 插件id,不可重复,必须唯一。插件的升级后续也是依赖插件id来进行识别的 -->
<id>com.myIdeaPlugins</id>
<!-- 插件名称 -->
<name>MyIdeaPlugins</name>
<!-- 插件开发人员,这里写一下开发者的个人信息. -->
<vendor email="support@yourcompany.com" url="https://www.yourcompany.com">YourCompany</vendor>
<!-- 插件描述,这里一般是写插件的功能介绍啥的 -->
<description><![CDATA[
Enter short description for your plugin here.<br>
<em>most HTML tags may be used</em>
]]></description>
<!-- 插件依赖,这里我们默认引用idea自带的依赖即可 -->
<depends>com.intellij.modules.platform</depends>
<!-- 定义拓展点,比较少用到,一般是用于你去拓展其他人插件功能拓展点,或者是你的插件扩展了 IntelliJ 平台核心功能才会配置到这里 -->
<extensions defaultExtensionNs="com.intellij">
</extensions>
</idea-plugin>
步骤4、将build.gradle.kts文件的kts后缀去掉,稍微改一下原有文件的内容。调整后的文件内容如下
原文件:build.gradle.kts
// 项目依赖的插件,默认会依赖kotlin,但我们这里是直接用java来开发插件的,所以这里依赖我们可以去掉
plugins {
id("java")
id("org.jetbrains.kotlin.jvm") version "1.8.21"
id("org.jetbrains.intellij") version "1.13.3"
}
// 插件的一些基本信息,按实际情况填就行,不是很重要
group = "com"
version = "1.0-SNAPSHOT"
// 插件等依赖的下载地址,默认会去中央仓库下载,这里我们一般是会改为直接去idea官网下载或者是用其他镜像
repositories {
mavenCentral()
}
// 这里是很重要的配置,定义了gradle构建时依赖的idea版本,我们进行插件调试的时候,会使用这里定义的idea版本来进行测试的。
intellij {
version.set("2022.2.6")
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("222")
untilBuild.set("232.*")
}
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"))
}
}
修改后文件:build.gradle
// 项目依赖的插件,默认会
依赖kotlin,但我们这里是直接用java来开发插件的,所以这里依赖我们可以去掉
plugins {
id("java")
id("org.jetbrains.intellij") version "1.17.3"
}
// 插件的一些基本信息,按实际情况填就行,不是很重要
group = "com"
version = "1.0-SNAPSHOT"
// 插件等依赖的下载地址,默认会去中央仓库下载,这里我们一般是会改为直接去idea官网下载或者是用其他镜像
repositories {
mavenCentral()
}
// 这里是很重要的配置,定义了gradle构建时依赖的idea版本,
// 我们进行插件调试的时候,会使用这里定义的idea版本来进行测试的
intellij {
version.set("2023.2.6")
}
//定义构建的任务,主要是改一下编译的jdk版本,插件适用的idea版本等信息
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
options.compilerArgs += ['-Xlint:unchecked', '-Xlint:deprecation', '-parameters']
}
patchPluginXml {
sinceBuild.set("222")
untilBuild.set("242.*")
}
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"))
}
步骤5、去掉settings.gradle.kts文件的后缀
步骤6、删除src目录下的kotlin目录,新建java目录
最终项目架构如下
步骤7、开始编码
新建一个action文件
简单写个demo,用来获取项目名字
package com.myideaplugins;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
public class showProjectName extends AnAction {
@Override
public void actionPerformed(AnActionEvent e) {
Project project =e.getProject();
Messages.showMessageDialog("项目名字",project.getName(),Messages.getInformationIcon());
}
保存后打包
首次启动项目,会根据我们之前在build.gradle
文件中配置的idea版本去网上下载对应的安装包,可能耗时会有点久。下载成功后,会打开一个新的idea,打开后我们随便选择某个项目或者新建一个项目就行。
步骤8、打包按照
插件的构建
当自己的插件测试好了之后,希望打包出来,可以通过buildPlugin
来打包我们的插件
插件构建
构建好后我们可以在build/lib
目录下面找到我们的jar包,拿到后后续可以直接在idea上面进行离线安装