一、背景
最近突想要给公司内部的项目做一个简单的 IDEA 插件,项目通过下面的配置的方式来定义接口路由。
<core:filter uri="/api/../query.htmls" service="com.dld.**.UserService"
method="query"/>
插件的作用就是通过点击配置的方法名,再根据配置的全路径服务类,可以导航到服务类中对应方法上。
二、开始
官方提供了三种形式来开发插件,这里我们选择第一种 Using GitHub Template 的方式来进行开发。
该方式是使用官方的提供的 IntelliJ Platform Plugin Template 项目作为模版,可以加速插件开发初期的设置阶段,从而将更多的精力放在开发插件上面。
该模版做了很多方便的配置,并且提供了简单的小案例,可以让你快速体会插件开发的成就感,具体的使用还是推荐仔细阅读模版的文档。
粗略的使用流程:
打开模版项目所在的 GitHub 页面。
点击代码框上方最右侧的绿色
Use this template
按钮,并在新的页面中通过该模版创建自己的项目。将新创建的项目克隆到本地。
用
IDEA
打开本地项目,等待项目环境加载完成。运行
Gradle
中的intellij
->runIde
任务,该任务会启动一个新的测试IDEA
,之后用其打开任意一个项目,即可看到安装插件之后的IDEA
效果。
三、遇到问题
1、不支持 Java
代码,会报 ClassNotFoundException
异常,是由于项目是 Kotlin
项目导致的,需要在项目根目录的 build.gradle.kts
文件中添加以下代码。
sourceSets {
getByName("main").java.srcDirs("src/main/kotlin")
getByName("test").java.srcDirs("src/test/kotlin")
}
2、添加需要的插件的依赖,比如 Java
插件。
- 在
build.gradle.kts
中intellij { }
添加依赖。
intellij {
...
// Plugin Dependencies:
// https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_dependencies.html
setPlugins("java")
}
- 同时需要在
src/main/resources/META-INF/plugin.xml
中添加依赖。
<!-- Product and plugin compatibility requirements -->
<!-- https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html -->
...
<depends>com.intellij.java</depends>
四、插件发布
按照这里的要求添加自己的插件图标,不要使用默认提供的。
提供正确的变更记录描述,而非模版提供的默认描述。
插件开发完成后,如果希望可以在 JetBrains
产品的 Plugin Marketplace
中进行安装,需要将插件上传到 JetBrains
官方仓库中。有如下两种方式:
[A]、Publishing a Plugin
登录 JetBrains Plugins Repository,如果没有账号的话,需要先注册一个。
执行
intellij
->buildPlugin
任务来编译插件。点击右上方的登录用户名,下拉选择
Upload plugin
,在新的页面中填写插件相关的信息,最后点击上传按钮。
[B]、Gradle 任务上传
该方式需要在环境变量中添加 PUBLISH_TOKEN
变量,该变量值为你在官方仓库的 TOKEN
,如果没有的话,需要手动创建。
登录 JetBrains Plugins Repository,如果没有账号的话,需要先注册一个。
点击右上方的登录用户名,下拉选择
My profile
,在新的页面中打开My Tokens
标签。在标签右侧填写
Token name
,并点击Generate Token
按钮,这时候你会看到生成的Token
值,该值只会在当前显示,之后再也无法查看,所以需要手动保存该值。在
intellij
->publishPlugin
任务上右键,选择创建当前任务的运行配置,在弹出框中的Environment variables:
中添加PUBLISH_TOKEN
变量的设置。
PUBLISH_TOKEN=刚刚创建的Token值
- 执行任务。注意每次发布的版本号必须比之前发布的版本号要大。
五、最后
这里只是简单的介绍了开发 JetBrains
插件的流程,更多插件开发请参考官方的Jetbrains 插件开发文档。
源码参见 hll-api-navigator