Skip to content

插件依赖管理

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", "*")

依赖声明建议

  1. 必需依赖:核心功能依赖的插件
  2. 可选依赖:增强功能依赖的插件
  3. Core 版本:明确声明支持的框架版本范围

相关 API

说明
PluginDependencyResolver依赖解析器
PluginDependency依赖描述记录
PluginMetadata插件元数据
PluginManager插件管理器

下一步

Released under the Apache License 2.0