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 员工讨论插件和扩展开发的地方。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的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 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。