插件依赖管理
LCGYL Framework 提供了完整的插件依赖管理能力,确保插件间的依赖关系正确、版本兼容。
功能概述
- 依赖完整性检查 - 必需依赖缺失时报错,可选依赖缺失时提示
- 版本冲突检测 - 多个插件对同一依赖有不兼容版本要求时预警
- 循环依赖检测 - 防止 A→B→C→A 的循环引用
- 重复插件检测 - 阻止同一插件加载两次
- Core 版本兼容性 - 检查插件与框架核心版本是否兼容
快速开始
1. 声明插件依赖
java
PluginMetadata.builder()
.pluginId("my-plugin")
.name("My Plugin")
.version("1.0.0")
.dependencies(List.of(
PluginDependency.required("lcgyl-jdbc-plugin", "[1.0.0,2.0.0)"),
PluginDependency.optional("lcgyl-cache-plugin", "[1.0.0,)")
))
.minCoreVersion("2.0.0")
.maxCoreVersion("3.0.0")
.build();2. 检查依赖
java
// 获取依赖解析器
PluginDependencyResolver resolver = pluginManager.getDependencyResolver();
// 检查单个插件
ResolveResult result = resolver.preCheck(plugin);
// 检查所有已加载插件
ResolveResult result = resolver.resolveAll();
// 打印检查报告
resolver.printReport(result);版本范围语法
| 格式 | 含义 | 示例 |
|---|---|---|
[min,max] | 闭区间,包含两端 | [1.0.0,2.0.0] → 1.0.0 ≤ v ≤ 2.0.0 |
[min,max) | 左闭右开 | [1.0.0,2.0.0) → 1.0.0 ≤ v < 2.0.0 |
(min,max] | 左开右闭 | (1.0.0,2.0.0] → 1.0.0 < v ≤ 2.0.0 |
(min,max) | 开区间 | (1.0.0,2.0.0) → 1.0.0 < v < 2.0.0 |
[min,) | 大于等于 | [1.0.0,) → v ≥ 1.0.0 |
(,max] | 小于等于 | (,2.0.0] → v ≤ 2.0.0 |
1.0.0 | 精确版本 | 必须是 1.0.0 |
* | 任意版本 | 无版本限制 |
依赖类型
必需依赖
核心功能依赖的插件,缺失时会阻止加载:
java
PluginDependency.required("lcgyl-jdbc-plugin", "[1.0.0,2.0.0)")可选依赖
增强功能依赖的插件,缺失时仅提示:
java
PluginDependency.optional("lcgyl-cache-plugin", "[1.0.0,)")检查报告
问题级别
| 级别 | 图标 | 说明 |
|---|---|---|
| ERROR | ❌ | 严格模式下会阻止插件加载 |
| WARNING | ⚠️ | 警告信息,建议处理 |
| INFO | ℹ️ | 提示信息,可选处理 |
报告示例
========== 插件依赖检查报告 ==========
❌ 错误 (2):
- [my-plugin] 缺失必需依赖: 'lcgyl-jdbc-plugin' (版本要求: [1.0.0,2.0.0))
💡 建议: 请先加载插件 'lcgyl-jdbc-plugin',或在依赖配置中添加
- [my-plugin] Core 版本不兼容,当前: 2.0.0,要求: [3.0.0,)
💡 建议: 升级 LCGYL Framework Core 到 3.0.0 或更高版本
⚠️ 警告 (1):
- [another-plugin] 版本冲突: 'lcgyl-cache-plugin' 当前版本 1.5.0,要求 [2.0.0,)
💡 建议: 升级 'lcgyl-cache-plugin' 到 2.0.0 或更高版本
ℹ️ 提示 (1):
- [my-plugin] 可选依赖 'lcgyl-redis-plugin' 未加载,相关功能可能不可用
=====================================配置严格度
java
PluginManager pluginManager = new PluginManager(pluginDir);
// 严格模式(默认):依赖错误会阻止加载
pluginManager.setStrictDependencyCheck(true);
// 宽松模式:仅打印警告,不阻止加载
pluginManager.setStrictDependencyCheck(false);最佳实践
版本范围建议
java
// ✅ 推荐:使用语义化版本范围(主版本兼容)
PluginDependency.required("dep", "[1.0.0,2.0.0)")
// ⚠️ 谨慎:精确版本可能导致兼容性问题
PluginDependency.required("dep", "1.2.3")
// ❌ 避免:无限制版本可能引入不兼容版本
PluginDependency.required("dep", "*")依赖声明建议
- 必需依赖:核心功能依赖的插件
- 可选依赖:增强功能依赖的插件
- Core 版本:明确声明支持的框架版本范围
相关 API
| 类 | 说明 |
|---|---|
PluginDependencyResolver | 依赖解析器 |
PluginDependency | 依赖描述记录 |
PluginMetadata | 插件元数据 |
PluginManager | 插件管理器 |