程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 依赖管理 - Maven

    • Maven 安装配置
    • Maven 仓库解析
    • Maven 项目构建
    • Maven 依赖管理
    • 手动安装Maven依赖
    • Maven 聚合
      • 1. 聚合的作用
      • 2. 聚合的基本配置
        • 2.1 配置父项目的 pom.xml
        • 2.2 modules 元素的作用
      • 3. 聚合的执行顺序
      • 4. 聚合项目的目录结构
        • 4.1 子模块位于父项目文件夹内
        • 4.2 子模块位于不同路径
      • 5. 聚合与继承的区别
      • 6. 聚合的实际应用场景
    • Maven 继承
    • Maven 属性
    • Maven 版本与测试
    • Maven 资源与多环境配置
    • Maven 生命周期与插件
    • 本地搭建Maven私服
    • Docker搭建Maven私服
    • Maven 上传中央仓库
    • Maven 依赖排除插件
  • 开发管理 - Git

  • Git小乌龟教程

  • 代码管理
  • 依赖管理 - Maven
scholar
2024-08-20
目录

Maven 聚合

# Maven 聚合

  • 1. 聚合的作用
  • 2. 聚合的基本配置
    • 2.1 配置父项目的 pom.xml
    • 2.2 modules 元素的作用
  • 3. 聚合的执行顺序
  • 4. 聚合项目的目录结构
    • 4.1 子模块位于父项目文件夹内
    • 4.2 子模块位于不同路径
  • 5. 聚合与继承的区别
  • 6. 聚合的实际应用场景

# 1. 聚合的作用

Maven 聚合(Aggregation)用于快速构建多个相关联的项目或模块。通过创建一个父项目,统一管理和构建多个子项目,可以一次性执行所有模块的构建任务。聚合常用于大型项目中的多模块管理,使得项目结构更为清晰,构建流程更加高效。

image-20240820205034301

提示

聚合的最大作用就是一次性执行所有模块的构建任务。当你有多个模块需要同时构建时,聚合可以将它们统一管理起来,通过父模块进行一次性构建。无论是编译、测试、打包还是安装操作,聚合都可以让所有子模块在一个命令下被依次执行,极大地提高了构建效率。

# 2. 聚合的基本配置

聚合通常通过创建一个空的父项目来实现,父项目的 pom.xml 文件会指定其打包类型为 pom,并列出所有需要聚合的子模块。

# 2.1 配置父项目的 pom.xml

父项目通常没有自己的业务代码,仅用于管理多个子模块。pom.xml 文件中的关键配置如下:

<project>
    <modelVersion>4.0.0</modelVersion>
    
    <!-- 父项目的基本信息 -->
    <groupId>com.example</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging> <!-- 打包类型为 pom,表示这是一个聚合项目 -->
    
    <!-- 聚合的子模块列表 -->
    <modules>
        <module>module-a</module>
        <module>module-b</module>
        <module>module-c</module>
    </modules>
</project>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 2.2 modules 元素的作用

<modules> 元素用于列出所有需要聚合的子模块。每个 <module> 标签指向子模块的相对路径,例如:

<modules>
    <module>module-a</module>
    <module>module-b</module>
    <module>module-c</module>
</modules>
1
2
3
4
5

在构建父项目时,Maven 会根据这些路径依次构建子模块。

# 3. 聚合的执行顺序

参与聚合操作的模块执行顺序与模块间的依赖关系有关,而与配置顺序无关。Maven 会根据模块间的依赖关系自动调整构建顺序,以确保依赖项在被引用之前已经构建完成。

例如:

  • 如果 module-a 依赖于 module-b,即使在 pom.xml 中 module-a 被配置在前,Maven 仍会先构建 module-b,然后再构建 module-a。

# 4. 聚合项目的目录结构

聚合项目的目录结构可以灵活设计,子模块不一定要位于父项目的文件夹内。以下是两种常见的目录结构:

# 4.1 子模块位于父项目文件夹内

parent-project/
│
├── pom.xml
├── module-a/
│   └── pom.xml
├── module-b/
│   └── pom.xml
└── module-c/
    └── pom.xml
1
2
3
4
5
6
7
8
9

# 4.2 子模块位于不同路径

parent-project/
│
└── pom.xml
other-directory/
├── module-a/
│   └── pom.xml
├── module-b/
│   └── pom.xml
└── module-c/
    └── pom.xml
1
2
3
4
5
6
7
8
9
10

在这种结构下,只要在父项目的 <modules> 中正确配置子模块的路径,Maven 仍然可以完成聚合构建。

# 5. 聚合与继承的区别

Maven 中的聚合与继承常常结合使用,但两者有本质区别:

  • 聚合(Aggregation):用于一次性构建多个模块。父项目通过列出子模块路径来实现聚合管理。
  • 继承(Inheritance):用于共享和继承配置。子模块通过继承父项目的 pom.xml,共享依赖管理、插件配置等。

典型场景:一个大型项目通常会有一个父项目(用于聚合和继承),以及多个子模块(继承父项目的配置并作为聚合的一部分)。

# 6. 聚合的实际应用场景

  • 微服务架构:在微服务项目中,每个服务可以作为一个独立的模块,通过聚合实现统一构建和管理。
  • 多模块项目:在大型企业项目中,不同模块的代码可以独立开发和测试,但最终需要一起打包发布,聚合能够有效管理这种多模块结构。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
手动安装Maven依赖
Maven 继承

← 手动安装Maven依赖 Maven 继承→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式