IDEA 插件版本升级和兼容新版本 idea
1.关于 IDEA 插件的版本设置问题
打开 jetbrains 插件市场,随意打开一个插件详情页面的 Versions 菜单,我们可以看见一个插件包不同时期发布的不同版本(Versions),并且每个版本包含了可兼容 IDEA 或 PyCharm 的版本范围(Compatibility Range)和更新时间(Update Date)(如下图所示,图例参考链接:https://plugins.jetbrains.com/plugin/20956-huawei-cloud-codearts-check/versions)。
于用户视角而言,只要依据 idea 或 PyCharm 版本下载对应的插件版本即可,如果用户直接从 IDEA/PyCharm 的 Settings->Plugins->Marketplace 直接搜索下载,用户甚至无需考虑版本和兼容性问题。
而对于插件开发者视角,插件的版本和对 IDEA 各版本的可兼容则是不可避免的需要考虑的问题,那么插件的版本和可兼容范围是如何设置的呢?
【插件版本设置】
有的插件工程包含 build.gradle,有的不包含 build.gradle,所以设置版本和兼容 idea 范围的方式略有不同。
(1)工程中不包含 build.gradle:
plugin.xml 文件中添加 <version></version> 标签,用以设置版本号;设置<idea-version since-build="起始版本" until-build="终止版本"/>定插件兼容范围,until-build 可选。
(2)工程中包含 build.gradle
build.gradle 文件中设置 version 定版本号(此处示例为 groovy 和 kotlin 两种设置方式);设置 sincBuild、untilBuild 定插件兼容范围,untilBuild 可选。
【插件可兼容范围】
当然,一个 idea 插件要兼容不同版本 idea 不是仅仅改变一个数字参数那么简单,要保证插件能在对应版本的 IDEA 上能够正确运行,还需要兼顾插件对于 idea 版本的兼容性
因为 IDEA 插件开发所使用的基础依赖都来自于 idea 的 com.intellij
所以逻辑上来说,只要插件所引用的来自于 com.intellij 的 API(内源 API)存在于某版本的 IDEA 内,插件就可以适配于该 IDEA 版本,如果插件所引用内源 API 在新版本 IDEA 中被弃用或者替换,则插件不适用于新版本 IDEA。
除此之外,IDEA 编译所需的 JDK、gradle 版本的变化也会影响插件对 idea 版本的兼容性。
举两个栗子:
例 1:新版本 IDEA 弃用旧 API 使得插件不适用于新版本 IDEA:某插件 CodeArts Check 在本地 debug 使用 idea2021.1 版本及之前版本启动插件时没有问题,使用 idea2021.2 及之后版本启动则报错(报错信息如下所示)。是因为插件中调用的 com.intellij.ide.plugins.cl.PluginClassLoader 类在 2021.2 版本中已经被弃用,应该要用替换类 com.intellij.ide.plugins.cl.PluginAwareClassLoader 替换,才能适用 idea2021.2 及之后版本。
·
例 2:新版本 IDEA 只支持更高版本 gradle 和 jdk 使得插件不适用于新版本 IDEA:某插件 CodeArts Check 在兼容 2023.1 IDEA 时 debug 和编译报错(报错信息如下所示),无法启动。是因为 2023.1 IDEA 支持编译的 gradle 和 jdk 版本已升级为 gradle7.4 和 jdk17,所以低版本的 gradle、jdk 无法编译。
gradle 版本不匹配,编译报错:
jdk 版本不匹配,启动报错:
因此,每次 IDEA 出现新版时,需要在 jetbrains 官网查看新版本 IDEA 是否有 jdk 和 gradle 依赖的硬性要求,或者有 api 需要替换,以便插件兼容新版本 IDEA,并且为了更大范围兼容 IDEA 版本,往往一个版本的插件需要发布多个包,区分适配哪个版本范围的 IDEA 插件。
其他参考:
idea 最新变化:https://www.jetbrains.com/zh-cn/idea/whatsnew/
idea 版本更新通知:https://www.jetbrains.com/zh-cn/idea/download/other.html
内部 api 迁移:https://plugins.jetbrains.com/docs/intellij/api-internal.html#intellij-platform
插件 API 变化:https://plugins.jetbrains.com/docs/intellij/api-notable.html
不兼容 API 更改:https://plugins.jetbrains.com/docs/intellij/api-changes-list.html
验证插件兼容性: https://plugins.jetbrains.com/docs/intellij/verifying-plugin-compatibility.html#obsolete-api
2.关于 IDEA 插件设置无限兼容版本
IDEA 插件兼容新版本 idea 有两个方案:
无限兼容:每次都只发布一个版本来适配和兼容所有版本 IDEA
有限兼容:每次发多个版本来适配和兼容不同版本的 IDEA(CodeArts Check 插件也采取一次发布多个版本包的方案来兼容不同版本 IDEA)
3.关于 IDEA 插件设置无限兼容版本和有限兼容版本的优缺点总结
评论