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.
2.2 KiB
2.2 KiB
| kind | name | category | scope | source_files |
|---|---|---|---|---|
| dependency_management | Maven 多模块依赖版本统一管理 | dependency_management | [**] | [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,避免循环依赖