IntelliJ 插件验证器检查基于 IntelliJ 的 IDE 构建和 IntelliJ 平台插件之间的二进制兼容性。
这个工具很有用,因为插件作者通常会指定一个很宽的[since; until] 兼容性范围,但只针对该范围内的特定 IDE 编译插件。
IntelliJ 平台 API 可能会在版本之间偶尔发生变化,因此可能会出现二进制不兼容的情况,导致运行时出现 NoClassDefFoundError
、NoSuchMethodError
和类似的异常。
[!提示] 在大多数情况下,IntelliJ 插件验证器将通过 Gradle IntelliJ 插件的
runPluginVerifier
任务来使用,详见 集成。
插件验证器可以检测到的示例问题:
com.example.Foo
。如果插件是针对 IDE v1.0 编译的,而类 com.example.Foo
在 IDE v2.0 中被移除,就可能发生这种情况。NoSuchMethodError
。A
依赖于插件 B
,但插件 B
没有与此 IDE 兼容的构建。这意味着用户无法安装插件 A
,因为 IDE 要求安装所有依赖的插件。从 JetBrains 软件包仓库 或 Maven Central 下载最新可用的 verifier-cli-<version>-all.jar
。
或者,使用 curl
从命令行下载 JAR 归档文件:
curl -L -o verifier-all.jar https://packages.jetbrains.team/maven/p/intellij-plugin-verifier/intellij-plugin-verifier/org/jetbrains/intellij/plugins/verifier-cli/<version>/verifier-cli-<version>-all.jar
<version>
是最新版本,你可以在软件包页面或 GitHub 发布中找到。
你可以使用 GitHub API 获取最新发布信息。
结果的 JSON 响应可以使用 jq
工具解析。
然后,可以将构件 URL 提供给 curl
进行下载。
curl -s https://api.github.com/repos/JetBrains/intellij-plugin-verifier/releases/latest \
| jq -r '.assets[].browser_download_url' \
| xargs curl -L --output verifier-all.jar
插件验证器可以使用命令行运行:
java -jar verifier-all.jar [命令] [选项]
命令是 check-plugin
、check-ide
或 check-trunk-api
之一。
从 1.260 版本开始,插件验证器需要 Java 11。 在此版本之前,需要 Java 8。
所有验证结果都以以下方式打印和保存:
结果保存在 <verification-$timestamp>
目录中(可以使用 -verification-reports-dir
选项更改)。
此目录下的文件布局如下。单个文件的格式未指定。
基本上,这些文件 包含人类可读的句子。
<验证报告目录>/
<IDE 版本 #1>/
plugins/
<插件 #1 的 ID/
<插件 #1 的版本>/
<... 报告文件 ...>
<插件 #2 的 ID>/
...
<IDE 版本 #2>/
plugins/
...
文件 | 描述 | 存在条件 |
---|---|---|
verification-verdict.txt | 人类可读的验证结果。 | 始终 |
dependencies.txt | 验证期间使用的插件依赖。 | 插件有效 |
compatibility-warnings.txt | 此插件与 IDE 的兼容性警告。 | > 0 |
compatibility-problems.txt | 此插件与 IDE 的兼容性问题。 | > 0 |
deprecated-usages.txt | "使用了已弃用 API" 案例的描述。 | > 0 |
experimental-api-usages.txt | "使用了实验性 API" 案例的描述。 | > 0 |
internal-api-usages.txt | "使用了内部 API" 案例的描述。 | > 0 |
override-only-usages.txt | "错误使用了仅供覆盖的 API" 案例的描述。 | > 0 |
non-extendable-api-usages.txt | "错误使用了不可扩展的 API" 案例的描述。 | > 0 |
plugin-structure-warnings.txt | 插件自身问题的描述,与 IDE 兼容性无关。 | > 0 |
invalid-plugin.txt | 如果插件无效,则包含无效插件错误的描述。 | 插件无效 |
注意! 如果你正在实现与插件验证器的集成,你可以检查相应文件的存在来区分"成功"和"失败"的验证。
如果指定了 -teamcity (-tc)
选项,结果将以 TeamCity 测试格式 打印。
要选择展示类型,请指定 -tc-grouping (-g)
选项为 plugin
(按每个插件分组)或 problem_type
(按问题分组)。
如果未指定 -teamcity
,结果将打印到控制台。
此命令用于针对一组插件检查 IDE 构建。
check-ide
<IDE>
[-runtime-dir | -r <文件>]
[-plugins-to-check-file | -ptcf <文件>]
[-plugins-to-check-all-builds | -p-all < ':' 分隔列表>]
[-plugins-to-check-last-builds | -p-last < ':' 分隔列表>]
[-excluded-plugins-file | -epf <文件> ]
[-team-city | -tc ]
[-tc-grouping | -g ]
[-external-prefixes <':' 分隔列表>]
[-dump-broken-plugin-list | -d]
[-ignored-problems | -ip <文件>]
[-keep-only-problems | -kop <文件>]
<IDE>
可以是本地 IDE 安装路径,也可以是 IDE 模式(见下方 通用选项)
如果没有明确指定插件,则将验证 插件仓库 中所有兼容的插件(选项)。
针对 pluginsToCheck.txt
中列出的所有插件检查 IDEA Ultimate #162.1121.32:
java -jar verifier-all.jar -runtime-dir /home/user/.jdks/corretto-11.0.8 -team-city -tc-grouping problem_type -excluded-plugins-file ignorePlugins.txt -plugins-to-check-file pluginsToCheck.txt -dump-broken-plugin-list actualBroken.txt check-ide /tmp/IU-162.1121.32
针对 Kotlin
和 NodeJs
插件的所有版本以及 PHP
插件的最新版本检查 IDEA Ultimate 162.1121.32:
java -jar verifier-all.jar -runtime-dir /home/user/.jdks/corretto-11.0.8 -plugins-to-check-all-builds org.jetbrains.kotlin:NodeJS -plugins-to-check-last-builds com.jetbrains.php check-ide /tmp/IU-162.1121.32
此命令用于针对一个或多个 IDE 检查一个或多个插件(选项)。
check-plugin
<插件>
<IDE> [<IDE>]*
[-runtime-dir | -r <文件>]
[-team-city | -tc ]
[-tc-grouping | -g ]
[-external-prefixes <':' 分隔列表>]
[-suppress-internal-api-usages no|jetbrains-plugins]
[-mute 逗号分隔的插件问题标识符列表]
<插件>
可以是 <插件路径>
或 '@<文件>'
,文件中包含要验证的插件路径列表,每行一个。
<IDE>
可以是本地 IDE 安装路径,也可以是 IDE 模式(见下方 通用选项)
-suppress-internal-api-usages
将抑制 JetBrains 插件的内部 API 使用。
JetBrains Marketplace 默认使用此选项。
允许的值:
no
:将报告所有内部 API 使用。这是默认值。jetbrains-plugins
:不会报告 JetBrains 插件的内部 API 使用。-mute
将静音(忽略)指定的插件问题。
支持的值:
ForbiddenPluginIdPrefix
,TemplateWordInPluginId
,TemplateWordInPluginName
允许使用逗号分隔的插件问题列表,例如:
-mute TemplateWordInPluginId,TemplateWordInPluginName
此开关将静音任何支持的插件问题类型 — 包括与插件描述符相关的插件问题。
通常,上传到 JetBrains Marketplace 的长期存在的插件可能会使用比新插件更宽松的规则进行验证。 此选项用于静音不适用于此类插件的插件问题。
针对 IDEA Ultimate 162.2032.8、163.1024 和 163.7277 检查 Kotlin
插件:
java -jar verifier-all.jar -runtime-dir
验证报告将保存的目录路径。
默认情况下,等于 <当前工作目录>/verification-<时间戳>
。
-verification-reports-formats (-vrf)
验证报告的输出格式。
支持的格式有:plain
(控制台输出)、html
和 markdown
默认情况下,启用 plain
和 html
输出格式。
支持多种输出格式,用逗号分隔。
以 -
(破折号)开头的输出格式将被抑制:可以是默认输出格式集或指定的输出格式。
示例:
plain,markdown
将启用控制台输出和 Markdown 验证报告。-plain
将禁用控制台输出,但保留默认的 HTML 输出。""
(字面空字符串)将禁用所有验证报告格式。
这实际上会抑制控制台输出,只留下日志消息。-runtime-dir (-r)
包含 Java 运行时 JAR 文件(JDK)的目录路径。
如果未指定,将使用提供的 IDE
参数中的嵌入式 JDK。
如果 IDE 不包含嵌入式 JDK,将使用 JAVA_HOME
环境变量来解析 Java 运行时。
-external-prefixes (-ex-prefixes)
外部库类的前缀。 插件验证器不会报告这些包的类的"无此类"错误。
-plugins-to-check-all-builds (-p-all)
要与 IDE 一起检查的插件 ID。 插件验证器将检查所有兼容的插件构建。
-plugins-to-check-last-builds (-p-last)
要与 IDE 一起检查的插件 ID。 插件验证器将只检查最后一个插件构建。
-team-city (-tc)
如果要在标准输出上打印兼容 TeamCity 的输出,请指定此标志。
-tc-grouping (-g)
对 TeamCity 问题展示进行分组: 可选 'plugin' 按每个插件分组或 'problem_type' 按问题类型分组。
-excluded-plugins-file (-epf)
包含排除的插件构建列表的文件。 即使这些更新与 IDE 兼容,验证器也不会验证它们。 包含排除的插件构建列表的文件(例如 '<IDE-home>/lib/resources.jar/brokenPlugins.txt')。
-offline
如果插件验证器必须只使用本地下载的插件依赖项,并且必须避免发出 HTTP 请求,请指定此标志。
-dump-broken-plugin-list (-d)
用于转储损坏的插件 ID 的文件。 损坏的插件是那些在验证结果中至少包含一个问题的插件。
-plugins-to-check-file (-ptcf)
包含要检查的插件列表的文件。 文件的每一行可以是:
plugin_id
(检查插件的所有构建)$plugin_id'
(只检查插件的最后一个构建)-subsystems-to-check (-subsystems)
指定要检查的 IDE 子系统。
可用选项:all
(默认)、android-only
、without-android
。
-ignored-problems (-ip)
包含将在报告中忽略的问题列表的文件。
文件必须包含以下格式的行:<plugin_xml_id>:<plugin_version>:<problem_description_regexp_pattern>
。
plugin_xml_id
和 plugin_version
都是可选的。
示例:
DevKit:242.19890.14:access to unresolved class org.foo.Foo.*
— 忽略标识符为 DevKit
且版本为 242.19890.14
的插件中出现的问题。org.jetbrains.kotlin::access to unresolved class org.jetbrains.kotlin.compiler.*
— 忽略 Kotlin 插件所有版本的问题。access to unresolved class org.jetbrains.kotlin.compiler.*
— 忽略所有插件的问题。-keep-only-problems (-kop)
包含将在报告中反映的问题模式的文件。所有其他问题将被忽略。应用于简短的问题描述。
文件必须包含以下形式的行:<plugin_xml_id_regexp_pattern>:<plugin_version_regexp_pattern>:<problem_description_regexp_pattern>
插件验证器使用以下路径进行操作:
<home-directory>
- 所有其他目录的基础目录:
<USER_HOME>/.pluginVerifier
,-Dplugin.verifier.home.dir
JVM 参数修改,例如 -Dplugin.verifier.home.dir=/tmp/verifier
,<plugins-directory> = <home-directory>/loaded-plugins
- 下载插件的缓存目录,<extracted-directory> = <home-directory>/extracted-plugins
- 用于提取以 .zip
归档形式分发的插件的临时目录。下载插件
要验证的插件和插件的依赖项会被下载到 <plugins-directory>
。
它可以在插件验证器的多次运行之间重复使用:在第一次运行时,所有必要的插件将被下载,而在后续运行中,它们将从缓存中获取。
请注意,不仅会 下载要验证的插件,还会下载所有插件的依赖项。
插件从插件仓库下载到 <plugins-directory>/<update-ID>.jar
或 <plugins-directory>/<update-ID>.zip
,具体取决于插件的打包类型。
<update-ID>
是插件版本在插件仓库数据库中的唯一 ID。
例如,Kotlin 1.2.30-release-IJ2018.1-1 的 update-ID
等于 43775
。
限制 <plugins-directory>
的大小
可以限制 <plugins-directory>
的大小,默认为 5 GB。
为此,请指定 JVM 选项 -Dplugin.verifier.cache.dir.max.space=<max-space-MB>
。
当占用空间达到限制时,插件验证器将从缓存中删除最近最少使用的插件。
提取 .zip 格式的插件
在开始验证这些插件之前,以 .zip
归档形式打包的插件会被提取到 <extracted-directory>/<temp-dir>
。
这是为了加速验证过程,因为验证需要进行大量的类文件搜索。
将插件验证器与您的项目集成的最简单方法是使用 Gradle IntelliJ Plugin,它提供了可配置的 runPluginVerifier
任务。
如果您的项目中不使用 Gradle,GitHub Actions Marketplace 中有预定义的第三方操作可用,它们可以自动化插件验证过程。
阅读更多关于可能的集成选项:验证插件兼容性
请在 YouTrack 上报告问题:https://youtrack.jetbrains.com/issues/MP(MP 代表 Marketplace
)
感谢您提前报告问题、提供反馈,并使插件验证器变得更好!
还有一个专门的 Slack 频道可用:#intellij-plugin-verifier。
JetBrains 平台 Slack 社区是一个让您可以与其他插件开发者和 JetBrains 员工讨论插件和扩展开发的地方。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
用于可扩展和多功能 3D 生成的结构化 3D 潜在表示
TRELLIS 是一个专注于 3D 生成的项目,它利用结构化 3D 潜在表示技术,实现了可扩展且多功能的 3D 生成。项目提供了多种 3D 生成的方法和工具,包括文本到 3D、图像到 3D 等,并且支持多种输出格式,如 3D 高斯、辐射场和网格等。通过 TRELLIS,用户可以根据文本描述或图像输入快速生成高质量的 3D 资产,适用于游戏开发、动画制作、虚拟现实等多个领域。
10 节课教你开启构建 AI 代理所需的一切知识
AI Agents for Beginners 是一个专为初学者打造的课程项目,提供 10 节课程,涵盖构建 AI 代理的必备知识,支持多种语言,包含规划设计、工具使用、多代理等丰富内容,助您快速入门 AI 代理领域。
AI Excel全自动制表工具
AEE 在线 AI 全自动 Excel 编辑器,提供智能录入、自动公式、数据整理、图表生成等功能,高效处理 Excel 任务,提升办公效率。支持自动高亮数据、批量计算、不规则数据录入,适用于企业、教育、金融等多场景。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号