# [依赖](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>
~~~
- 空白目录
- 测试
- ReadMe
- Idea
- Introduction介绍
- Part01-Plugins插件
- 创建你第一个插件
- 用github模版
- 用Gradle
- Gradle入门
- 配置Gradle项目
- 使用Gradle发布插件
- 用DevKit
- 创建开发环境
- 创建一个插件项目
- 运行和debug一个插件
- 部署一个插件
- 发布一个插件
- IDE开发实例
- 将插件发布到自定义插件存储库
- 插件结构
- 插件内容
- 类加载器
- Actions
- 扩展
- 服务
- 监听器
- 扩展点
- Components
- 插件配置文件
- 插件Logo
- 依赖
- 动态插件
- IntelliJ平台工件库
- 插件开发者的 Kotlin
- 插件签名
- 内部Actions菜单
- 启用内部模式
- 内部操作 - UI 子菜单
- 内部操作 - UI 检查器
- 内部操作 - LaF 默认值
- 性能优化
- 插件开发常见问题
- Part02-基础平台
- 基础
- 处理器和一次性
- 一般线程规则
- 消息基础设施
- IDE基础设施
- 用户界面组件
- 工具窗口
- 对话框
- Popups
- 通知
- 文件和类选择器
- 编辑器组件
- 列表和树控件
- 其他Swing组件
- 使用图标和图像
- 配色方案管理
- Kotlin 用户界面 DSL
- JCEF - Java Chromium 嵌入式框架
- 自定义 UI 主题
- 创建自定义 UI 主题
- 自定义 UI 主题 - 图标和 UI 控件
- UI 主题 - 编辑器方案和背景图像
- 公开主题元数据
- Actions
- Actions教程
- 创建Actions
- Actions分组
- 持久化模型
- 组件的持久状态
- 持久化敏感数据
- 设置
- 设置指南
- 自定义设置组
- 设置教程
- 文件
- 虚拟文件系统
- 虚拟文件
- 文档
- 编辑
- 编辑器基础
- xxx
- 代码实现
- Temp-理解
- xxx