合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
# [依赖](https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html) 一个插件可能依赖于来自其他插件的类,无论是捆绑的、第三方的还是同一作者的。本文档描述了用于声明插件依赖项和可选插件依赖项的语法。有关 IntelliJ 平台模块依赖项的更多信息,请参阅本文档的第二部分:[插件与 IntelliJ 平台产品的兼容性](https://plugins.jetbrains.com/docs/intellij/plugin-compatibility.html)。 > 无法为依赖插件指定最小/最大版本。 ([问题](https://youtrack.jetbrains.com/issue/IDEABKL-7906)) <br> ***** ## 所需步骤 要表达对来自其他插件或模块的类的依赖关系,请执行本页下面详述的以下三个必需步骤: 1. 定位插件ID 2. 创建项目 3. 在 plugin.xml 中 声明 如果在运行时出现 `NoClassDefFoundError` ,则表示步骤 3 被省略或加载插件依赖项失败(请检查[开发实例](https://plugins.jetbrains.com/docs/intellij/ide-development-instance.html#development-instance-settings-caches-logs-and-plugins)中的日志文件)。 <br> ***** # 1. 定位插件ID 和 准备沙盒 必须根据插件的兼容性仔细选择[兼容版本](https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html)。 对于在 [JetBrains Plugins Repository](https://plugins.jetbrains.com/) 上发布的插件 - 打开插件的详细信息页面 - 选择 **Versions** 选项卡 - 打开所需版本的详细信息页面,显示**兼容性范围**和**插件 ID** 对于捆绑和非公共插件,找到插件的主 JAR 文件,其中包含带有 `<id>` 标记(或 `<name>` 如果未指定)的 **META-INF/plugin.xml** 描述符。 如果插件未与目标 IDE 捆绑在一起,请运行目标 IDE 的(沙盒)[IDE 开发实例](https://plugins.jetbrains.com/docs/intellij/ide-development-instance.html)并在那里安装插件。 <br> ***** # 2. 创建项目 根据所选的开发工作流程(Gradle 或 DevKit),以下两个步骤之一是必要的。 【后续, 推荐 gradle】 >请参阅插件属性 [gradle-intellij-plugin: Configuration](https://github.com/JetBrains/gradle-intellij-plugin#configuration) 以获得可接受的值。 如果项目使用带有 Groovy 构建脚本的 Gradle 来构建插件,请将依赖项添加到 **build.gradle **中 `intellij` 块的 `plugins` 参数中,例如: **build.gradle** ~~~groovy intellij { plugins = ['org.another.plugin:1.0'] } ~~~ 使用 Kotlin 构建脚本时,请在 intellij 块中使用 plugins.set(),例如: **build.gradle.kts** ~~~kotlin intellij { plugins.set(listOf("org.another.plugin:1.0")) } ~~~ 当前必须明确指定测试所需的[传递依赖](https://github.com/JetBrains/gradle-intellij-plugin/issues/38)项。 ***** # 3. 在 plugin.xml 中 声明 无论插件项目是使用[所有产品中可用的模块](https://plugins.jetbrains.com/docs/intellij/plugin-compatibility.html#modules-available-in-all-products),还是[具体功能模块](https://plugins.jetbrains.com/docs/intellij/plugin-compatibility.html#modules-specific-to-functionality),都必须在 plugin.xml 中将正确的模块列为依赖项。如果项目依赖于另一个插件,则该依赖项必须像模块一样声明。如果仅使用通用 IntelliJ 平台功能 (API),则必须声明对 `com.intellij.modules.platform` 的默认依赖项。 <br> 要显示可用 IntelliJ 平台模块的列表,请在编辑插件项目的 **plugin.xml **文件时调用 <depends> 元素内容的[代码完成](https://www.jetbrains.com/help/idea/auto-completing-code.html)功能。 <br> 在 **plugin.xml** 中,添加一个 `<depends> `标签,其中包含依赖插件的 ID 作为其内容。继续上面[项目创建](https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html#2-project-setup)中的示例,**plugin.xml **中的依赖项声明将是: ~~~ <depends>org.another.plugin</depends> ~~~ <br> ***** # 可选插件依赖 插件还可以指定可选的插件依赖项。在这种情况下,即使插件所依赖的插件没有安装或启用,插件也会加载,但插件的部分功能将不可用。 声明额外的 `optional="true"` 和 `config-file` 属性指向可选的插件描述符文件: ~~~ <depends optional="true" config-file="myPluginId-optionalPluginName.xml">dependency.plugin.id</depends> ~~~ >其他插件描述符文件必须遵循命名模式 **myPluginId-$NAME$.xml** 产生唯一的文件名,以防止测试中的类加载器出现问题([详细](https://youtrack.jetbrains.com/issue/IDEA-205964)信息)。 <br> 例如,如果插件为 Java 和 Kotlin 文件添加了额外的突出显示,请使用以下设置。主 **plugin.xml** 将为 Java 定义一个注释器,并指定对 `Kotlin 插件的可选依赖项`(插件 ID `org.jetbrains.kotlin`): <br> **plugin.xml** ~~~ <idea-plugin> ... <depends optional="true" config-file="myPluginId-withKotlin.xml">org.jetbrains.kotlin</depends> <extensions defaultExtensionNs="com.intellij"> <annotator language="JAVA" implementationClass="com.example.MyJavaAnnotator"/> </extensions> </idea-plugin> ~~~ 然后在与主 **plugin.xml** 文件`相同的目录`中创建一个名为 **myPluginId-withKotlin.xml** 的文件。在该文件中,为 Kotlin 定义一个注释器: <br> **myPluginId-withKotlin.xml** ~~~ <idea-plugin> <extensions defaultExtensionNs="com.intellij"> <annotator language="kotlin" implementationClass="com.example.MyKotlinAnnotator"/> </extensions> </idea-plugin> ~~~