You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
2.2 KiB

1 month ago
---
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 的统一入口
-`<dependencyManagement>` 中声明所有第三方库的版本号,子模块引用时不指定 version,由父 POM 统一管控
- 使用 `<properties>` 集中定义版本号变量(如 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,避免循环依赖