IntelliJ Plugin Skill 用于指导开发者构建面向 IntelliJ 平台系 IDE(IntelliJ IDEA、Android Studio、PyCharm、WebStorm、GoLand、Rider、CLion、Fleet)的插件,采用 Kotlin、IntelliJ Platform Gradle Plugin 2.x 和 plugin.xml,覆盖从脚手架搭建到发布至 JetBrains Marketplace 的全过程。
用途 该技能面向需要在 IntelliJ 平台上开发插件的场景,帮助完成项目初始化、扩展注册、代码编写、测试、验证签名与发布。资料指出应使用 Kotlin,因为 IntelliJ 平台本身大部分由 Kotlin 编写,所有新 API 优先面向 Kotlin,Java-only 开发已不再被支持,当前平台构建目标为 JDK 21。
核心概念 IntelliJ 平台是承载插件的应用程序,理解其构件可避免常见错误:Application 是正在运行的 IDE 进程,可通过 ApplicationManager.getApplication() 获取的单例;Project 是打开的工作区,可同时存在多个,保存项目状态的代码应按项目而非全局处理;Module 是 Project 内的单元(内容根、SDK、依赖);Virtual File System(VFS)是平台对物理文件系统的内存映射,IDE 管理的文件应通过 VirtualFile/VfsUtil 而非 java.io.File 访问;PSI(程序结构接口)是源代码上的语法树层,通过 PsiFile、PsiElement、PsiClass 检查与修改代码,且具有语言感知能力;Action 是用户调用的命令,继承 AnAction;Service 是受管理的单例(AppLevel、ProjectLevel、ModuleLevel),通过 Service.getService(...) 或 project.getService(...) 获取;Extension Point(EP)是平台的可插拔机制,插件可向平台定义的 EP 贡献扩展,也可声明自己的 EP。
快速开始 资料给出五步流程:一是生成项目,可从 JetBrains Platform Plugin Template 或 IntelliJ IDEA 新建项目向导(File → New → Project → IDE Plugin)生成,现代构建使用 IntelliJ Platform Gradle Plugin 2.x(org.jetbrains.intellij.platform),而非旧的 org.jetbrains.intellij;二是配置 gradle.properties,包括 pluginGroup、pluginName、pluginVersion、pluginSinceBuild、pluginUntilBuild、platformType、platformVersion,并给出示例值;三是编写最小 plugin.xml,包含 id、name、vendor、description、change-notes、depends 与 extensions 等标签;四是编写第一个 Action(示例为 HelloAction,继承 AnAction 并通过 NotificationGroupManager 发送通知),并在 plugin.xml 的 actions 中注册,配置菜单分组与快捷键;五是运行,使用 ./gradlew runIde 启动加载插件的沙箱 IDE、./gradlew buildPlugin 生成可分发的 .zip、./gradlew verifyPlugin 运行 Plugin Verifier、./gradlew test 运行测试。
项目结构与配置 资料展示了标准项目目录结构,包括 build.gradle.kts、settings.gradle.kts、gradle.properties、src/main/kotlin、src/main/resources/META-INF/plugin.xml、icons、inspectionDescriptions、src/test 以及 build/distributions 等。plugin.xml 中列出了各标签用途,如 <id> 为反向 DNS 的唯一标识并需与 pluginGroup/Gradle 坐标一致、<name> 为显示名、<vendor>、<description>(CDATA 内 Markdown,展示于 Marketplace)、<change-notes>、<depends>、<idea-version>、<extensions>、<extensionPoints>、<applicationListeners>/<projectListeners>、<actions> 等。
测试与发布 测试使用 IntelliJ Test Framework 搭配 light fixtures,无需启动完整 IDE,示例为 LightPlatformTestCase 子类。发布方面,自 2021.2 周期起上传至 JetBrains Marketplace 的插件必须签名,Gradle 插件在提供证书链时可处理签名;需对证书链签名、base64 编码并通过环境变量暴露证书与私钥;./gradlew verifyPlugin 检查声明的 IDE 构建范围兼容性,./gradlew publishPlugin 在设置 publishToken 后上传至 Marketplace。
最佳实践与常见问题 应使用 Kotlin 并以 JDK 21 为目标;使用 IntelliJ Platform Gradle Plugin 2.x;除非已验证兼容性边界,否则保持 pluginUntilBuild 开放式(如 252.*);通过 VirtualFile/VFS 与 PSI 交互而非原始 java.io.File;使用平台服务处理单例并遵守读写访问线程规则;通过扩展点注册功能;发布前针对 sinceBuild 范围内最早构建运行 verifyPlugin;提供使用当前主题颜色的 13×13 SVG 图标。不应引用内部或 @ApiStatus.Internal API;不在 EDT 上执行重负载工作;不在应用级状态中持有 Project/PsiElement 的长生命周期引用;不向 Marketplace 提交未签名插件;不硬编码绝对路径;不将单一 platformVersion 固定得比 pluginSinceBuild 所暗示的更旧。常见问题涵盖运行时 ClassNotFoundException/NoClassDefFoundError、插件未在沙箱加载、verifyPlugin 报告 API 破坏、通知不显示、线程异常、编辑后 PSI 陈旧、上传签名失败等,并给出对应解决方式。
参考资料 知识参考包括 IntelliJ Platform SDK 官方文档(plugins.jetbrains.com/docs/intellij)、IntelliJ Platform Gradle Plugin 2.x、Kotlin、PSI 与 JetBrains Marketplace;配套文档涉及 project_setup.md、plugin_xml.md、extensions_and_actions.md、testing.md、publishing.md。