如果说普通maven项目是一个“单身公寓”(厨房、卧室、厕所都在一个房间里),那么由多个maven项目组成的多模块项目就像一套“三室两厅”的房子:每个房间功能明确,但都共用一套地暖和电路。
典型的多模块结构(以电商系统为例)
my-shop (父工程,只有 pom.xml)
├── shop-common (通用工具类、常量、POJO)
├── shop-dao (数据库访问层,MyBatis/JPA 代码)
├── shop-service (业务逻辑层,处理复杂的业务)
└── shop-web (控制层,Spring MVC/SpringBoot 启动类)
模块间的“套娃”关系
A. 纵向:继承 (Inheritance)
- 父 POM: 就像一个“管家”。它定义了所有子模块共用的 JDK 版本、编码格式(UTF-8)以及最重要的——三方库的版本号。
- 子 POM: 只需要说“我爸是谁”,就可以直接使用父类定义好的所有配置。
B. 横向:依赖 (Dependency)
- 模块之间是可以互相引用的。比如
shop-service模块需要操作数据库,那么它就在自己的pom.xml里添加对shop-dao的依赖。 - 构建顺序: Maven 非常聪明。当你构建整个项目时,它会自动计算:必须先编译
common,再编译dao,最后才是service。
| 特性 | 单体项目 (Single Module) | 多模块项目 (Multi-Module) |
|---|---|---|
| 上手难度 | 简单,直接写就完了 | 需要理解 Maven 继承和依赖关系 |
| 代码边界 | 模糊,容易乱调用 | 清晰,必须通过依赖引入才能调用 |
| 复用性 | 极差,只能靠复制粘贴 | 极强,一处编写,到处引用 |
| 适合规模 | 个人练习、小型 Demo | 企业级项目、中大型系统、微服务 |