JavaWeb——maven高级(4/5)-继承与聚合-聚合实现(项目构建过程的局限、Maven 聚合的解决方案、Maven继承与聚合的总结)

目录

Maven 的聚合实现

1. 聚合的引入与背景

1.1 多模块项目构建难题

1.2 构建失败的常见原因

2. 构建过程的局限

2.1 依赖模块需手动安装

2.2 构建顺序需人工维护

3. Maven 聚合的解决方案

3.1 聚合的核心作用

3.2 聚合工程的定义

4. 聚合工程的构建步骤

4.1 modules 标签的使用

4.2 聚合与构建演示

5. 聚合带来的构建体验提升

5.1 一键式项目构建

5.2 无需关心构建顺序

6. Maven继承与聚合的总结

6.1 各自作用

6.2 相同点

6.3 不同点


Maven 的聚合实现

1. 聚合的引入与背景

1.1 多模块项目构建难题

        在分模块开发之后,一个项目被拆分为多个模块,这些模块间存在复杂的依赖关系。例如:tlias-web-management 模块需要依赖 tlias 和 pojo 模块。随着项目规模扩大、模块增多、依赖关系复杂,项目构建过程变得繁琐。

1.2 构建失败的常见原因

        开发完成后,我们尝试直接对 tlias-web-management 执行 package 打包操作,发现构建失败。控制台输出提示:缺少 tlias-pojo 与 tlias-utils 两个 jar 包。原因是这两个模块未安装到本地仓库,Maven 在构建时找不到它们。


2. 构建过程的局限

2.1 依赖模块需手动安装

        为解决上述问题,我们必须先手动对 pojo 与 utils 执行 install 操作,将它们安装进本地仓库。接着还需安装 peilars-parent(父工程),否则也会因无法找到其依赖坐标而构建失败。最后再次执行 web-management 的 package 操作才能成功打包。

2.2 构建顺序需人工维护

        这个构建流程要求开发者必须清楚各模块间的依赖关系,并按正确顺序逐个 install,流程重复繁琐,且容易出错。


3. Maven 聚合的解决方案

3.1 聚合的核心作用

        Maven 的聚合功能可以将多个模块组合成一个整体,通过聚合工程进行统一管理和构建。聚合可以一键实现整个项目的打包、安装、编译、清理等操作,避免了手动操作多个模块的繁琐过程。

3.2 聚合工程的定义

        聚合工程本身没有业务逻辑,不包含代码,仅作为多个模块的聚合体。该工程通常只包含一个 pom.xml 文件,不包含 src 目录。一个常见做法是让 tlias-parent 既作为父工程,又作为聚合工程。


4. 聚合工程的构建步骤

4.1 modules 标签的使用

在 tlias-parent 的 pom.xml 文件中添加 <modules> 标签,用于声明需要聚合的模块:

<modules>
    <module>../tlias-utils</module>
    <module>../tlias-pojo</module>
    <module>../tlias-web-management</module>
</modules>

各模块的路径相对 tlias-parent 书写。模块的声明顺序无影响,Maven 会根据实际依赖关系自动决定构建顺序。

4.2 聚合与构建演示

        配置完成后,在 IDEA 中重新加载 Maven 项目。在 tlias-parent(聚合工程)上执行 cleanpackageinstall,即可自动对其聚合的所有模块依次执行相同操作,控制台日志会显示所有子模块的构建成功信息。


5. 聚合带来的构建体验提升

5.1 一键式项目构建

        通过聚合,只需在一个工程上操作,所有相关模块即可统一执行对应的生命周期操作,构建过程大大简化。

5.2 无需关心构建顺序

        Maven 会根据模块间的依赖关系自动安排构建顺序,无需手动控制模块构建的先后顺序。


6. Maven继承与聚合的总结

6.1 各自作用

  • 继承:用于统一管理依赖配置,简化模块间重复依赖声明。

  • 聚合:用于统一构建多个模块,实现一键清理、编译、打包、安装。

6.2 相同点

  • 两者均需一个打包方式为 pom 的特殊模块;

  • 二者本身不编写业务代码,仅包含 pom.xml,通常删除 src 目录即可;

  • 通常将两种角色合并为一个模块(如 peilars-parent 即是父工程也是聚合工程)。

6.3 不同点

维度继承聚合
配置位置在子模块 pom.xml 中通过 <parent> 指定父工程在聚合工程 pom.xml 中通过 <modules> 声明所有模块
可感知性父工程无法感知谁继承了自己聚合工程明确知道聚合了哪些模块
功能用途管理依赖配置统一执行构建操作

END


学习自:黑马程序员——JavaWeb课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值