YON CISE

IntelliJ Plugin - 插件发布多版本兼容性

IDEA 版本迭代中会新增或废弃一些已有的插件 API,基于已废弃 API 开发的插件将无法在新版本上正常运行,为了解决这个问题,IntelliJ 发布插件时可以指定你的插件支持的最小版本和最大版本,相关配置是在 plugin.xml 里的:

<idea-plugin>
  <!-- 支持 2021.1 到 2021.3 的 IDEA 版本 -->
  <idea-version since-build="211" until-build="213.*" />
  <!-- ... -->
</idea-plugin>

这一属性的设置是 Gradle 在构建插件的时候自动插入到 plugin.xml 里:

tasks {
    patchPluginXml {
        sinceBuild.set(properties("pluginSinceBuild"))
        untilBuild.set(properties("pluginUntilBuild"))
    }
}

最终的值是从 gradle.properties 文件里取出来的:

# See https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html
# for insight into build numbers and IntelliJ Platform versions.
pluginSinceBuild = 211
pluginUntilBuild = 213.*

如果我们只想限制插件支持的最低版本,可以只配置 since-build 属性,一个符合直觉的做法就是把 Gradle 里 patchPluginXml 任务中设置 until-build 属性的语句删掉,但是,我们会发现删掉之后最终生成的 plugin.xml 文件里还是有 until-build 的属性。原因是 Gradle 任务里还有一个属性和这些配置相关:

// Configure Gradle IntelliJ Plugin - read more: https://github.com/JetBrains/gradle-intellij-plugin
intellij {
    updateSinceUntilBuild.set(true)
}

只要 updateSinceUntilBuild 是 true(不设置,默认就是 true),那么最终的 plugin.xml 的文件里是肯定会有 since-builduntil-build 这两个属性的 [1],值是根据编译时的插件 SDK 版本生成的,如果你编译时插件版本是 211,那么最终 since-build211until-build211.*
所以如果我们想要只设置插件支持的最低版本,那么就有两个地方需要改:

  1. updateSinceUntilBuild 设置成 false
  2. patchPluginXml 任务里移除 untilBuild 的设置

[1] Patching the Plugin Configuration File