Maven 的多模块项目(Multi-Module Project)通过聚合(Aggregation)和继承(Inheritance)机制来管理复杂的项目结构。这两种机制可以单独使用,也可以结合使用。
1. 聚合(Aggregation):
聚合用于将多个模块组合在一起构建,通过在父 POM 中使用 <modules> 标签声明子模块。当构建父项目时,Maven 会自动构建所有子模块。
xml<project> <groupId>com.example</groupId> <artifactId>parent-project</artifactId> <packaging>pom</packaging> <modules> <module>module-a</module> <module>module-b</module> <module>module-c</module> </modules> </project>
2. 继承(Inheritance):
继承用于在子模块中共享父 POM 的配置,通过在子 POM 中使用 <parent> 标签引用父 POM。子模块可以继承父 POM 的依赖管理、插件配置、属性等。
xml<project> <parent> <groupId>com.example</groupId> <artifactId>parent-project</artifactId> <version>1.0.0</version> </parent> <artifactId>module-a</artifactId> </project>
父 POM 的常用配置:
<dependencyManagement>:统一管理依赖版本,子模块只需声明 groupId 和 artifactId<pluginManagement>:统一管理插件配置<properties>:定义公共属性,如版本号、编码格式等<dependencies>:定义所有子模块共享的依赖<build>:定义公共的构建配置
多模块项目的优势:
- 代码组织清晰,按功能或层次划分模块
- 依赖管理统一,避免版本冲突
- 构建效率高,可以单独构建特定模块
- 便于团队协作,不同团队负责不同模块
- 支持并行构建,提高构建速度
最佳实践:
- 父 POM 的 packaging 必须是 pom
- 子模块之间通过依赖关系引用,避免循环依赖
- 使用相对路径引用子模块,便于项目迁移
- 在父 POM 中使用
<dependencyManagement>统一管理版本 - 合理划分模块粒度,避免模块过多或过少
常用命令:
mvn clean install:构建整个项目mvn clean install -pl module-a:只构建 module-amvn clean install -pl module-a -am:构建 module-a 及其依赖的模块mvn clean install -pl '!module-a':构建除 module-a 外的所有模块