当前位置:   article > 正文

掌握Intellij-platform plugin插件开发必备知识(二)_idea platform

idea platform

插件开发基础

  • Intellij platform 插件可以使用java和Kotlin两种语言开发,开发插件时需遵守官方发布的特定的代码\开发规范,又由于Intellij平台插件体系非常庞大加之网上资料的匮乏,在某种程度上来讲初次接触还是有些难度的,对初学者不是太友好。
  • 本章内容详细描述了Intellij平台插件开发的基础知识,包括但不限于概念体系、参考资料、学习网站、基础配置等。实践证明,在了解了这些知识点后可以很大程度上可以加快后期学习/开发插件的效率,即使开发者接触了本章未提及的陌生内容也能知道如何查找相关资料或是向开发者论坛上求助。

Intellij Platform

IntelliJ platform本身并不是一个产品,它只提供了一个用于构建 IDE 的底层平台。此底层平台是开源的,源码可从intellij-community处下载,完全免费任何人都可以使用(商业用途除外)。但基于此平台开发的软件比如Intellij idea、PhpStorem等是需要购买licence的。

术语

  • Intellij Platform:JetBrains相关产品的基础开发平台,提供了基础UI以及代码编辑时的高级功能;
  • Intellij IDE:程序代码编写工具的统称,本文档中单指JetBrains旗下的相关产品,后续会简写为IDE;
  • Intellij Idea:JetBrains公司旗下一款java集成开发工具;
  • Theme:指Intellij IDE的外观设计,包括UE交互、UI元素等,但Theme插件只能调整UI元素的外观设计(字体、颜色、大小、图标);

IDE插件类型

基于IntelliJ平台的产品可以通过添加插件方式来修改和调整其默认功能以达到功能/性能增强的目的。JetBrains旗下所有IDE产品可下载的插件可以从JetBrains Marketplace获得。IDE插件主要有两大类:功能plugin和主题theme,按插件的实际用途可细分为如下5类:

  1. UI Themes(UI主题):设计师能够自定义内置IDE UI元素的外观,不能改变UE
  2. Custom language support (自定义编程语言支持,如Kotlin):为特定编程语言提供基本编辑和校验功能,可自定义语言也可基于现有语言开发。语言插件基本功能包括:文件类型识别、词汇分析、语法高亮显示、格式化、代码洞察力和代码完成、检查和快速修复、意向行动;
  3. Framework integration (框架集成,如Spring):一般的框架集成插件主要包括以下三项功能:改进的代码洞察功能,提供框架语法的验证以及通过插件可直接访问框架的特定功能;
  4. Tool integration (工具集成整合,如Maven、Gradle、Git):工具集成可以让IDE能直接操作第三方工具和组件,而无需频繁切换桌面工具;
  5. User interface add-ons (用户界面组件,如Random Background):此类插件将各种更改应用于IDE的标准用户界面,比如重新定义IDE交互式方式、提供新功能,而不仅限于UI修改。

虽然插件类型有5种之多,但多数插件或是功能强大的插件基本上都以IDE功能的增强为核心进行开发,这些增强功能一般包括:1、扩充操作-菜单和工具栏项;2、代码检查-代码分析,查看语法树和语义模型,并突出显示编辑器中的问题;3、意图-当文本插入符位于特定位置时,Alt+Enter菜单中可用的上下文特定操作;4、代码自动完成。

插件开发要求

下图是Intellij插件开发需要掌握的一些内容,可以先有个大概了解,后续会按主题详细讲解:
在这里插入图片描述

开发环境要求

IDE插件的开发环境有三个硬性要求,详细如下:

  • Gradle:工程构建工具,建议采用8.1+版本,不同的Gradle对java SDK的版本要求也不同,可在Gradle官网上查看其版本对应关系Compatibility Matrix
  • Java SDK:Sun(Oracle) SDK,最低要求1.8,目的是为Gradle提供运行环境;
  • JBR:全称JetBrains Runtime,提供在Windows、macOS和Linux上运行基于IntelliJ平台的IDE环境,JetBrains基于原生java SDK进行了一些修改以满足插件开发的需要。JBR与IDE版本绑定,目前建议采用JetBrains Runtime version 17.0.7版本;

需要注意的是:官方有时会要求下载Plugin devKit插件:下载地址,插件主页 这个插件用于最早版本的Intellij 插件的开发,现在用不到了,可以不下载,除非您的插件比较老;

编码技术要求

开发IDE插件,要求开发人员必须掌握如下技能,越精通越好:

  • Gradle构建工具:掌握基本的配置即可,不需要学习Groovy或Kotlin脚本语言编写;
  • Java 或 Kotlin语言:掌握其中一种语言即可,根据个人偏好,建议采用java语言编写;
  • Swing组件开发:JetBrains旗下所有的IDE产品界面都是使用Swing编写,也可使用经过Intellij扩展的Swing组件,因为这些扩展的组件提供了一些与插件相关的高级功能,注意不能使用AWT;

本专题示例开发环境

本文档中所有示例的本地开发环境配置如下:

  • 操作系统:MacOS Monterey 12.7.4
  • Intellij IDEA:IntelliJ IDEA 2024.1 (Ultimate Edition),安装了汉化插件
  • Gradle:8.7
  • java SDK: java 1.8.0_144
  • JBR:JetBrains Runtime version 17.0.9

插件开发概述

插件功能

之前已提过插件分为主题和功能两种,前者主要是针对设计师,此类插件只能改变IDE的UI样式不能改变IDE的交互和功能,而功能类型的插件是针对程序员的,围绕编程过程扩展展开旨在加快程序开发的效率。功能类型需要扩展Intellij平台或三方插件暴露出的扩展点(extensions point,简称EP),当然也可以编写一个扩展点插件供其它人进行二次开发定制也是允许的,功能插件一般可扩展的IDE功能如下图所示:
在这里插入图片描述

  • 菜单:可添加或覆盖(不推荐)现有菜单项,见上图序号1;
  • 工具窗口:可添加自定义工具,分左上、左下、右上、右下4部分,见上图序号2345;
  • 状态栏:可添加重要的提示信息或统计信息,底部右侧部分,见上图序号6;
  • 项目视图:即项目源码文件列表,可分组、过滤等,见上图左侧项目源码文件列表;
  • 编辑器:可扩展的部分包含文件头、gutter、编辑区,见上图序号789;
  • 右键菜单:见上图序号10;

除了上述扩展,还包括项目结构、运行配置以及针对源码内容的扩展(比如统计、高亮等),总之,除了IDE的UI界面布局框架外,所有的部分都可以用插件进行扩展。

开发流程

插件开发本身相当于一个简单的业务需求,需要经过设计、编码、测试以及最后打包发布。如果需要发布插件到插件市场供其他人下载使用则需要遵循官方的发布规范,在发布插件时需要官方审核通过后才能发布到插件市场,这些要求包括,比如插件描述只能用英文且需满足一定的字数。这些规范在官方文档上没有太完整的描述,新手比较容易踩坑,笔者会在后续发布时详细描述笔者发布插件过程中所遇到的一些问题。

插件开发完整流程可简单归纳为以下三步:

  1. 开发:插件本地开发、测试,可参考 开发文档
  2. 签名:注册帐号后,向官方申请电子签名,一种认证和安全保护机制,可参考 插件签名
  3. 发布:获取签名后,发布插件到官方插件市场,可参考 插件发布

开发教程

本节中详细列出了官方文档大约(注:文档会由官方定期更新)下列标红部分为重点内容,需要完全掌握,越精通越好。

  1. 第一部分 — plugins
    描述如何创建可以扩展 IntelliJ 平台的插件。包括有关如何设置项目、注册扩展点、针对 IntelliJ 平台的特定版本以及如何打包、部署和测试插件的详细信息。
  2. 第二部分——Base Platform
    描述架构的基础层,它提供许多功能和实用程序,例如组件模型、用户界面、文档和编辑器、虚拟文件系统、设置、线程和后台任务。基础平台层主要包括不针对语言特性或解析的 IntelliJ 平台的功能。
  3. 第三部分——Project Model
    项目模型,它表示当前加载项目的文件和配置,以及用于构建项目的构建系统。
  4. 第四部分——PSI
    程序结构接口 (PSI) 为许多不同的文件类型构建句法和语义模型。本节介绍如何使用 PSI、导航和操作语法树,还介绍了强大的引用系统,它允许语法树节点引用语义模型中的项目。它还详细说明了 PSI 如何创建和使用索引。
  5. 第五部分——Features
    描述如何扩展使用 PSI 层的各种功能并与之交互,例如代码完成、导航、Alt+Enter项目、意图、重构等。另请参阅下面的自定义语言部分,了解仅在添加对新语言的支持时适用的特定于语言的功能。
  6. 第六部分——Testing
    描述用于编写涵盖插件功能的自动化测试的可用基础设施。
  7. 第七部分 — Custom Languages
    插件经常扩展对现有语言的支持,例如向 Java 文件添加检查。本节介绍如何向 IntelliJ 平台添加对默认不支持的新语言的支持,创建解析器、句法和语义模型,以及构建在其上的所有功能。
  8. 第八部分 — Product Specific
    IntelliJ 平台中的许多功能与语言和产品无关。例如,代码检查在 Java 中的工作方式与在 Ruby 中的工作方式相同;只是语法树和语义信息不同。本节介绍特定于产品的功能,例如特定的项目模型差异以及如何在插件中定位它们。
  9. 第九部分 — Custom IDEs
    记录如何使用 IntelliJ 平台创建新的自定义 IDE,而不是现有产品(例如 WebStorm 或 Android Studio)的插件。
  10. 第十部分——Themes
    描述如何为基于 IntelliJ 平台的 IDE 创建主题。包括有关如何在 JetBrains Marketplace 上设置、自定义、构建和发布主题项目的详细信息。
  11. 附录I——Resources
    指向有用资源的链接、词汇表、扩展点和侦听器列表、有关如何探索 IntelliJ 平台 API和学习资源的提示。
  12. 附录 II — API and Compatibility
    有关验证插件兼容性的信息和向后不兼容的API 更改列表,以及IntelliJ 平台每个主要版本中的显着更改和新功能。
  13. 附录 III — 工具
    Gradle IntelliJ 插件等常用工具的参考和使用指南。

注:以上文档如果自学建议按顺序学习不能跳跃,因为高级功能是依赖底层能力的,比如PSI是所有针对源码功能增强的基础,比如查找引用、声明等。如果不能掌握PSI内容,是无法仅仅依靠几个示例demo就编写符合个人预期的理想插件的。

参考网站

开发插件时,以下站点经常用到,所以笔者特意整理了一些比较重要的参考资料,在之后系列课程的附录文档中会有更详细的整理说明。

  1. 主要开发参考文档
  • Gradle 官网:https://gradle.org/ Gradle
  • plugin官网:https://plugins.gradle.org/ Gradle
  • 使用手册:https://blog.csdn.net/liudonglovehemin/article/details/130980784
  1. 插件发布和学习相关参考文档
  • Intellij plugin插件市场:https://plugins.jetbrains.com/ Intellij
  • plugin需求市场:https://plugins.jetbrains.com/plugin-ideas/ Intellij
  • plugin官方文档:https://plugins.jetbrains.com/docs/intellij/welcome.html#usage
  • Intellij plugin 扩 展 点:https://plugins.jetbrains.com/intellij-platform-explorer/extensions
  • Intellij plugin开发FAQ:https://plugins.jetbrains.com/docs/intellij/faq.html
  1. 问答区
  • Intellij plugin官方博客:https://blog.jetbrains.com Intellij
  • plugin开发社区:https://intellij-support.jetbrains.com/
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/680696
推荐阅读
相关标签
  

闽ICP备14008679号