写在前面
本篇文章以Intellij-plugin-hellowworld为例,给出一个Idea插件开发的基本步骤。
一、场景描述
我们的微服务很多,30+靠上,服务之间的调用是通过feign,有时候看代码,找到feign之后还需要找到对应服务的controller,也是很耗时间的。能不能开发一个插件像MyBatisX的mapper和dao跳转一样,答案是显而易见的。但是,在Marketplace上找了很多,没有找到能用的。
为了提高团队效率,于是乎,自己开发了一个,效果还不错。本篇文章给出一个最简单的IDEA插件开发示例。
二、Intellij-plugin-helloworld
1.环境说明
| 名称 | 说明 |
|---|---|
| IntelliJ IDEA | 2023.3.1 (Ultimate Edition) |
2.必备条件
JDK的版本必须是17以后(IDE Plugin projects require a minimum of Java 17)
Gradle项目,默认是基于kotlin(我们给修改成Java)
2.1 下载Oracle JDK 17,安装并配置
下载安装, Oracle JDK 17 下载地址
2.1.1 导入SDKs

导入完成后,有2个地方需要配置一下。
2.1.2 Build Gradle Gradle JVM

2.1.3 Module Module SDK

2.2 安装Plugin DevKit 插件新建项目

此时新建项目,Generators中会出现IDE Plugin(我们可以基于它来创建插件项目)
说明:默认创建的项目是Kotlin(我们接下来将其修改为Java版本)

去除build.gradle.kts 和 settings.gradle.kts 文件的.kts后缀
修改包名src/main/kotlin为java

build.gradle的内容进行修改:
//import javax.tools.JavaCompiler
plugins {
id("java")
// id("org.jetbrains.kotlin.jvm") version "1.9.20"
id("org.jetbrains.intellij") version "1.16.0"
}
group = "cn.thinkinjava"
version = "1.0.0"
repositories {
mavenCentral()
}
// Configure Gradle IntelliJ Plugin
// Read more: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html
intellij {
// version.set("2023.1.5")
// type.set("IC") // Target IDE Platform
version = "2023.3"
type = "IC"
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小图标,重新加载。
2.3 Reload All Gradle Project

> Task :prepareKotlinBuildScriptModel UP-TO-DATE
Download https://cache-redirector.jetbrains.com/www.jetbrains.com/intellij-repository/releases/com/jetbrains/intellij/idea/ideaIC/2023.3/ideaIC-2023.3.zip, took 2 m 25 s 40 ms
Download https://cache-redirector.jetbrains.com/www.jetbrains.com/intellij-repository/releases/com/jetbrains/intellij/idea/ideaIC/2023.3/ideaIC-2023.3-sources.jar, took 1 m 41 s 815 ms
Download https://cache-redirector.jetbrains.com/intellij-jbr/jbr_jcef-17.0.9-windows-x64-b1087.7.tar.gz, took 45 s 106 ms
BUILD SUCCESSFUL in 5m 55s
2.4 配置Intellij Platform Plugin SDK
Intelli Platform Plugin SDK是Intellij平台插件的SDK,是基于JDK之上运行的,类似开发Android应用需要Android SDK。
操作:File-》Project Structure
Add Intellij Platform Plugin SDK… -》选择IDEA的安装目录-》JDK选择17


2.5 下载Intellij Platform Plugin SDK源码并关联

关联后,build.gradle文件中的代码可以通过ctrl + 光标进行显示

3.开发HelloWorld
需求:我们创建一个Action,名为 show hello world,放在 Help -》About的后面
点击时,弹出Hello world!
3.1 创建Action


点击OK,IDEA会自动创建一个Action动作的Java类和该插件对应的配置
编写代码如下:
HelloWorldAction.java
public class HelloWorldAction extends AnAction {
@Override
public void actionPerformed(AnActionEvent e) {
String message = "Hello world!";
Messages.showInfoMessage(e.getProject(), message, "Title");
}
}
plugin.xml
<idea-plugin>
<id>cn.thinkinjava.intellij-plugin-helloword</id>
<name>helloword</name>
<vendor email="" url="https://github.com/qiuxianbao">thinkinjava</vendor>
<description></description>
<depends>com.intellij.modules.platform</depends>
<extensions defaultExtensionNs="com.intellij"></extensions>
<actions>
<action id="cn.thinkinjava.intellijpluginhelloword" class="cn.thinkinjava.intellijpluginhelloword.HelloWorldAction"
text="show Hello world">
<add-to-group group-id="HelpMenu" anchor="after" relative-to-action="About"/>
</action>
</actions>
</idea-plugin>
3.2 测试Action
Tasks-》intellij -》runIde

右键run,会弹出一个新的idea(该idea中Plugins中即有helloworld插件)




3.3 打包插件
插件传播和发布都需要打包,打包后会获得一个zip包
执行buildPlugin,
在distributions中即有一个intellij-plugin-hellowworld-1.0.0.zip的插件


三、参考资料
idea 插件开发之 HelloWorld
Idea插件开发-开发自己的第一款idea插件
Creating a Plugin Gradle Project
写在后面
如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。

9644

被折叠的 条评论
为什么被折叠?



