--- kind: dependency_management name: Maven 多模块依赖版本统一管理 category: dependency_management scope: - '**' source_files: - pom.xml - crm-base/pom.xml - crm-auth/pom.xml - crm-file/pom.xml - crm-app/pom.xml --- 该 CRM 工程采用 Maven 聚合 POM 架构,通过父 POM 集中管理所有子模块的依赖版本与构建插件,实现依赖版本的统一治理。 **核心机制** - 父 POM(根目录 pom.xml)继承 `spring-boot-starter-parent:3.3.5`,作为 Spring Boot BOM 的统一入口 - 在 `` 中声明所有第三方库的版本号,子模块引用时不指定 version,由父 POM 统一管控 - 使用 `` 集中定义版本号变量(如 mybatis-plus.version、minio.version、hutool.version 等),便于批量升级 **内部模块依赖关系** - crm-base:基础公共模块,被其他所有业务模块依赖,仅提供 spring-security-core 而非完整 starter,避免默认安全拦截 - crm-auth:认证权限模块,依赖 crm-base + spring-boot-starter-security,提供 JWT、RBAC、数据范围控制 - crm-file:文件存储模块,依赖 crm-base + MinIO SDK,提供文件上传/下载/预览能力 - crm-app:应用启动入口,聚合所有业务模块并配置运行时依赖(MySQL、Redis、MinIO 等) **版本管理策略** - 第三方库版本集中在父 POM 的 properties 和 dependencyManagement 中管理 - Lombok 在所有模块中标记为 optional 或 provided scope,避免打包进最终产物 - 测试依赖统一使用 spring-boot-starter-test,版本由 Spring Boot BOM 托管 - 数据库驱动(mysql-connector-j、H2)仅在需要的模块中引入,scope 设置为 runtime 或 test **构建插件管理** - spring-boot-maven-plugin 在父 POM 的 pluginManagement 中统一配置,排除 Lombok 依赖 - 只有 crm-app 模块实际启用 repackage 生成可执行 jar,其他模块仅作为依赖库 **约束与约定** - 子模块引用依赖时不允许自行指定版本,必须遵循父 POM 管理的版本 - 新增业务模块命名规范为 `crm-{业务域}`,按相同模式添加到 modules 列表 - 模块间依赖遵循单向依赖:crm-app → crm-auth/crm-file → crm-base,避免循环依赖