乐闻世界logo
搜索文章和话题

Maven 的多模块项目如何管理?聚合和继承有什么区别?

2月18日 21:27

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>:定义公共的构建配置

多模块项目的优势:

  1. 代码组织清晰,按功能或层次划分模块
  2. 依赖管理统一,避免版本冲突
  3. 构建效率高,可以单独构建特定模块
  4. 便于团队协作,不同团队负责不同模块
  5. 支持并行构建,提高构建速度

最佳实践:

  • 父 POM 的 packaging 必须是 pom
  • 子模块之间通过依赖关系引用,避免循环依赖
  • 使用相对路径引用子模块,便于项目迁移
  • 在父 POM 中使用 <dependencyManagement> 统一管理版本
  • 合理划分模块粒度,避免模块过多或过少

常用命令:

  • mvn clean install:构建整个项目
  • mvn clean install -pl module-a:只构建 module-a
  • mvn clean install -pl module-a -am:构建 module-a 及其依赖的模块
  • mvn clean install -pl '!module-a':构建除 module-a 外的所有模块
标签:Maven