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插件设置无限兼容版本和有限兼容版本的优缺点总结
| 无限兼容版本: | 有限兼容版本: | |
| 优点 | 新版本IDEA出现时,无需重新发版适配,可以直接安装 | 可适配的idea版本,插件功能均不会报错,可以保证插件功能不受内部api更新迭代影响。 |
| 缺点 | 如果使用到的内部api,在新版本idea中被弃用,则插件功能不齐全,即使可以按装也依旧会报错 | 新版本idea发版时,插件无法立刻兼容新版本,需要开发人员适配后发新版本兼容。 |
相关文章:
IDEA插件版本升级和兼容新版本idea
1.关于IDEA插件的版本设置问题 打开jetbrains插件市场,随意打开一个插件详情页面的Versions菜单,我们可以看见一个插件包不同时期发布的不同版本(Versions),并且每个版本包含了可兼容IDEA或PyCharm的版本范围…...
Docker 容器应急
容器网络简单理解 容器拥有n多张veth网卡与一张docker0网卡 docker 五种网络 bridge 默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。host 容器不会获得一个独立的network namespace,而是与宿主机共用一个…...
webservice接口自动化测试
1,用soupui进行测试 2,安装soupUI 3,测试的时候是给了一个wdsl 操作步诹:new (name , 填写地址)---导入wsdl文件---看到所有的接口 发送请求的格式<xml> canshu</xml> 应用场景,…...
精益生产与MES生产管理系统相互融合
近年来,精益生产理念在企业管理中越来越受欢迎。它强调以最小的浪费,在最短的时间内,生产出高质量的产品。这一理念的实施手段包括准时制生产方式、适时生产方式等,消除浪费、看板、快换工装等都是精益提高的工具方针。 然而&…...
(c语言进阶)指针的进阶
一.字符指针 1.一般应用 (1)%c的应用 (2)%s的应用 字符指针没有权限通过解引用去改变指针指向的值 2.笔试题 题目:判断输出结果 int main() { const char* p1 "abcdef"; const char* p2 "…...
用路由器远程维护三菱PLC操作指南
用路由器远程维护三菱PLC操作指南...
FPGA面试题(7)
一.解释一下SPI的四种模式 01时钟极性CPOL空闲状态为低电平空闲状态为高电平时钟相位CPHA在第一个跳变沿采样在第二个跳变沿采样 模式CPOLCPHA描述模式000sclk上升沿采样,sclk下降沿发送模式101sclk上升沿发送,sclk下降沿采样模式210sclk上升沿发送&…...
Python接口自动化测试之【测试函数、测试类/测试方法的封装】
前言 在pythonpytest 接口自动化系列中,我之前的文章基本都没有将代码进行封装,但实际编写自动化测试脚本中,我们都需要将测试代码进行封装,才能被测试框架识别执行。 例如单个接口的请求代码如下: import requests…...
ROS仿真软件Turtlebot-Gazebo的安装使用以及错误处理[机器人避障]
很多时候由于机器人价格比较贵,而且会因为环境因素、操作失误或者摔坏等,所以我们可以先在仿真软件上做测试,也可以避免这些问题,虽然没有那么真实感,可毕竟是免费的嘛。我们可以在这些仿真的机器人身上去学习如何控制…...
把excel文件内容转化为json文件
js如何把excel文件转化为json文件呢?可以通过xlsx还有循环遍历来做 第一步:安装xlsx包 npm install xlsx这里我需要转化为这种类型 {key:value,key:value,key:value, }如果需要转化为其他格式,到时候需要在循环遍历的时候灵活运用 上代码…...
前端 - 将非 jpeg 格式图片转为 jpeg 格式、压缩图片
目录 将非 jpeg 格式图片转为 jpeg 格式压缩图片使用 将非 jpeg 格式图片转为 jpeg 格式 /common/compressImage/convertImage // 思路是创建一个图片,将file等于这个图片,然后创建一个canvas图层 ,将canvas等比例缩放, //然后用…...
随着 ChatGPT 凭借 GPT-4V(ision) 获得关注,多模态 AI 不断发展
原创 | 文 BFT机器人 在不断努力让人工智能更像人类的过程中,OpenAI的GPT模型不断突破界限GPT-4现在能够接受文本和图像的提示。 生成式人工智能中的多模态表示模型根据输入生成文本、图像或音频等各种输出的能力。这些模型经过特定数据的训练,学习底层模…...
Zookeeper-JavaApI操作
JavaApI操作 JavaApI操作1) Curator 介绍2) Curator API 常用操作a) 建立连接与CRUD基本操作b) Watch事件监听c) 分布式锁c.1) 介绍c.2) Zookeeper分布式锁原理c.3) 案例:模拟12306售票 JavaApI操作 1) Curator 介绍 Curator 是 Apache ZooKeeper 的Java客户端库。…...
Vue2.0打包指定路由前缀
【1】修改vue.config.js 如下修改publicPath: module.exports {publicPath:/concert,lintOnSave: false }【2】修改router/index.js base指定路由前缀: const router new VueRouter({mode: history,base: /concert, //指定路由前缀// base: process.env.BASE_…...
[vxe-table] 合并行后滚动错位
使用vxe-table的属性:span-method合并行,之后下拉后会错位 原因:缺少配置 scroll-y"{enabled: false}"参考: vxe-table合并行后错位...
动态规划:05不同路径
动态规划:05不同路径 62. 不同路径 五部曲 确定dp数组含义:到达第i,j位置的路径条数为d[i][j] 确定递归公式:d[i][j]d[i-1][j]d[i][j-1] 我们发现,想要到d[i][j],只能从d[i-1][j]或者d[i][j-1]达到 dp数…...
html与css知识点
html 元素分类 块级元素 1.独占一行,宽度为父元素宽度的100% 2.可以设置宽高 常见块级元素 h1~h6 div ul ol li dl dt dd table form header footer section nav article aside 行内元素 1.一行显示多个 2.不能设置宽高,宽高由元素内容撑开 常见行内…...
spring boot simple类型cache使用
注意:这里用的不是 redis 的缓存,simple 的缓存默认用的是 java 的 ConcurrentHashMap, 单纯的 simple 缓存,只需要引入下面的 pom 依赖即可:spring-boot-starter-cache <dependency><groupId>org.springf…...
springboot-aop-redis-lua 实现的分布式限流方案
1.自定义限流注解 Target({ElementType.METHOD, ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Inherited Documented public interface Limit {/*** 名字*/String name() default "";/*** key*/String key() default "";/*** Key的前缀*/String…...
C++ realloc()用法及代码示例
C realloc()用法及代码示例 C 中的realloc() 函数重新分配先前分配但尚未释放的内存块。realloc() 函数重新分配先前使用 malloc() 、 calloc() 或 realloc() 函数分配但尚未使用 free() 函数释放的内存。如果新大小为零,则返回的值取决于库的实现。它可能会也可能…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
