Maven 入门与进阶:聚合、继承与生命周期详解

        Maven 是 Java 项目管理的核心工具,其强大的依赖管理、项目构建和模块化设计能力,极大地提升了开发效率。本文将深入探讨 Maven 的 聚合(Multi-module)继承(Inheritance)生命周期(Lifecycle) 三大核心特性,并通过实际案例帮助你快速掌握其使用方法。


一、Maven 的聚合(Multi-module)

1.1 什么是聚合?

聚合(Multi-module)是 Maven 提供的一种多模块项目管理机制。通过聚合,开发者可以将多个子模块整合到一个父工程中,从而实现统一的构建、测试和部署操作。
核心优势

  • 统一管理:父工程通过 <modules> 标签声明所有子模块,执行 Maven 命令时,所有子模块会自动参与构建。
  • 简化操作:无需逐个进入子模块执行命令,只需在父工程目录下运行一次命令即可完成所有模块的处理。

1.2 如何配置聚合?

父工程的 pom.xml 需满足以下条件:

  1. 打包方式必须为 pom
    <packaging>pom</packaging>
  2. 通过 <modules> 声明子模块
    <modules><module>submodule1</module><module>submodule2</module>
    </modules>
    • submodule1 和 submodule2 是子模块的相对路径(通常与父工程同级目录)。

1.3 聚合的典型场景

假设有一个电商系统项目,包含 user-serviceorder-serviceproduct-service 三个模块,父工程 ecommerce-parentpom.xml 配置如下:

<project><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>ecommerce-parent</artifactId><version>1.0.0</version><packaging>pom</packaging><modules><module>../user-service</module><module>../order-service</module><module>../product-service</module></modules>
</project>

在父工程目录下执行 mvn clean install,Maven 会自动依次构建所有子模块。


二、Maven 的继承(Inheritance)

2.1 什么是继承?

继承是 Maven 的另一大核心特性,允许子模块通过 <parent> 标签继承父工程的配置(如依赖、插件、属性等)。
核心优势

  • 减少重复配置:公共依赖和插件可集中管理,避免在每个子模块中重复声明。
  • 版本统一:通过父工程统一管理依赖版本,降低版本冲突风险。

2.2 如何配置继承?

  1. 父工程配置

    • 定义公共依赖和属性:
      <project><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>ecommerce-parent</artifactId><version>1.0.0</version><packaging>pom</packaging><properties><junit.version>4.13.2</junit.version></properties><dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency></dependencies></dependencyManagement>
      </project>
  2. 子模块配置

    • 通过 <parent> 继承父工程:
      <project><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>ecommerce-parent</artifactId><version>1.0.0</version></parent><artifactId>user-service</artifactId><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><!-- 不需要声明版本号,直接继承父工程 --></dependency></dependencies>
      </project>

2.3 继承的典型场景

在上述电商项目中,若所有子模块都需要引入 junit 测试框架,只需在父工程中统一配置版本号。子模块无需重复声明版本,直接引用依赖即可。


三、Maven 的生命周期(Lifecycle)

3.1 三套生命周期简介

Maven 的生命周期分为三套相互独立的流程,每套生命周期包含多个阶段(Phase),且阶段按固定顺序执行。

生命周期描述常用阶段
Clean清理项目,删除构建生成的文件pre-cleancleanpost-clean
Default核心构建流程(编译、测试、打包等)validatecompiletestpackageinstalldeploy
Site生成项目文档和报告pre-sitesitepost-sitesite-deploy

3.2 生命周期的执行规则

  • 独立性:三套生命周期互不干扰,可单独执行某一生命周期的任意阶段。
  • 顺序性:同一生命周期内,后一个阶段会自动触发前一个阶段。例如,执行 mvn package 时,会自动执行 compile 和 test

3.3 典型命令示例

  1. 清理项目

    mvn clean

    执行 clean 生命周期的 clean 阶段,删除 target 目录。

  2. 编译并打包

    mvn package

    执行 default 生命周期的 compiletestpackage 阶段,生成 JAR/WAR 包。

  3. 安装到本地仓库

    mvn install

    将构建产物安装到本地 Maven 仓库(~/.m2/repository)。

  4. 部署到远程仓库

    mvn deploy

    将构建产物部署到远程仓库(需配置 settings.xmldistributionManagement)。


四、聚合与继承的联合使用

在实际项目中,聚合和继承通常结合使用,形成 “父工程+子模块” 的结构。例如:

4.1 项目结构

ecommerce-parent/
├── pom.xml          # 父工程(聚合 + 继承)
├── user-service/    # 子模块1
│   └── pom.xml
├── order-service/   # 子模块2
│   └── pom.xml
└── product-service/ # 子模块3└── pom.xml

4.2 父工程配置

<project><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>ecommerce-parent</artifactId><version>1.0.0</version><packaging>pom</packaging><modules><module>user-service</module><module>order-service</module><module>product-service</module></modules><properties><junit.version>4.13.2</junit.version></properties><dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency></dependencies></dependencyManagement>
</project>

4.3 子模块配置

user-service 模块为例:

<project><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>ecommerce-parent</artifactId><version>1.0.0</version></parent><artifactId>user-service</artifactId><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency></dependencies>
</project>

五、总结

Maven 的 聚合继承生命周期 是构建复杂项目的三大支柱:

  • 聚合:统一管理多模块项目,简化构建流程。
  • 继承:复用配置,减少冗余,统一依赖版本。
  • 生命周期:标准化构建流程,确保项目一致性。

通过合理设计父工程和子模块,开发者可以高效管理大型项目的依赖、构建和发布,显著提升开发效率和代码质量。掌握这些核心特性,是 Java 开发者进阶的必经之路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94125.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手搓MCP客户端动态调用多MCP服务,调用哪个你说了算!

01 引言 前两天&#xff0c;有个粉丝朋友咨询MCP服务如何动态调用&#xff0c;动态加载MCP服务的链接&#xff1f;我们都知道MCP客户端可以配置多个MCP服务的地址&#xff1a; spring.ai.mcp.client.sse.connections.server1.urlhttp://localhost:xxxx spring.ai.mcp.client.ss…

Go语言中的优雅并发控制:通道信号量模式详解

在Go语言的并发编程中&#xff0c;“通过通信共享内存”的设计哲学贯穿始终。当面对高并发场景时&#xff0c;无限制创建goroutine可能导致资源耗尽、CPU过载等问题&#xff0c;通道信号量模式&#xff08;Channel Semaphore Pattern&#xff09; 正是一种基于Go通道特性的优雅…

鸿蒙 NEXT开发中轻松实现人脸识别功能

大家好&#xff0c;我是 V 哥。 今天给大家介绍在 HarmonyOS 原生鸿蒙开发中&#xff0c;实现人脸识别功能&#xff0c;这个功能在常用的 APP 开发中上镜率还是很高的&#xff0c;在传统的 Android 或 iOS 开发中&#xff0c;通常我们要借助第三方库来实现&#xff0c;而在鸿蒙…

华为开发者空间训练营-优秀作品公布

排名标题总分奖品1手把手教你开发一个地区智能查询MCP&#xff0c;赋能地理位置类MCP服务的“零输入”无感交互95华为 freebuds 6i 蓝牙耳机2基于华为开发者空间云主机DeepSeek助力电商企业AI海报文案驱动的最佳实践落地 94华为 freebuds 6i 蓝牙耳机32小时基于华为开发者空间和…

基于Python与Tkinter开发的微博多功能自动化助手

文章目录 摘要 1. 背景与意义 2. 需求分析 3. 核心架构设计 3.1. 技术选型 3.2. 核心思想:UI与逻辑分离的异步架构 4. 深度模块化剖析 4.1. 微博核心API交互模块 4.2. 健壮性设计:代理与重试机制 4.3. GUI界面模块 (WeiboApp 类) 4.4. 异步任务处理模块 5. 难点分析与解决方案…

效果驱动复购!健永科技RFID牛场智能称重项目落地

近日&#xff0c;北京某养殖企业持续下单电子耳标识读器&#xff0c;在牛场智能称重中落地应用&#xff0c;通过自动、准确地识别牛只并记录体重数据&#xff0c;显著提升效率和数据精准度&#xff0c;实现了“效果驱动复购”的良性循环。健永科技RFID技术在北京某养殖企业智能…

计算机网络:2、TCP和UDP

2、TCP和UDP 简介 TCP(transmission Control Protocol)&#xff1a;是一种通信标准&#xff0c;它使应用程序和计算设备能够在网络上交换消息。它的设计目的是在互联网上发送数据包&#xff0c;并确保数据和信息在网络上的成功传递。UDP(the User Datagram Protocol)&#xf…

WEB安全篇:浏览器攻击原理及防护

1、XSS&#xff1a;跨站脚本攻击就是攻击者想尽一切办法将可以执行的代码注入到网页中。攻击者在web页面恶意插入HTML或script标签&#xff0c;当用户浏览该页面时&#xff0c;恶意代码就会被执行&#xff0c;从而达到攻击的目的。XSS利用的是用户对指定网站的信任。比如&#…

汇编语言学习2---GNU Debugger (GDB)

学习记录&#xff0c;在汇编语言 &#xff0c;我们面对的是机器码&#xff08;以汇编指令形式展现&#xff09;&#xff0c;所以断点要设置在机器码被加载到内存中的位置。 GEF插件使用 安装插件wget -O ~/.gdbinit-gef.py -q https://gef.blah.cat/pyecho source ~/.gdbinit-g…

谈谈架构的内容

一、架构的定义架构是一个界定不清的东西&#xff0c;我们很难讲清楚哪些东西是架构&#xff0c;哪些东西不是架构。但软件行业里其实人人都在搞架构&#xff0c;软件设计就是架构本身。架构这个词出现得很早&#xff0c;有些人认为是 NASA&#xff08;也可能是NATO&#xff09…

C#文件(夹)读取相关(完善中。。。)

前言阅读项目编辑器的代码时&#xff0c;发现好多与文件&#xff08;夹&#xff09;路径相关代码。本来自己之前对路径相关的东西就模模糊糊&#xff0c;希望通过这篇笔记能让自己模糊的地方明朗一下。" / " 与 " \ "你是否有过这样的疑惑&#xff1a;Wind…

FPGA DP1.4 With DSC解决方案

引言&#xff1a;迎接高清高刷时代的显示挑战随着8K分辨率、高刷新率、HDR和更广色域内容的普及&#xff0c;传统视频接口的带宽正面临极限。DisplayPort 1.4标准虽提供了高达32.4 Gbps的带宽&#xff08;HBR3速率&#xff09;&#xff0c;但要无压缩地传输8K60Hz 10bpp HDR视频…

新手向:Python开发简易网络服务器

Python网络服务器开发指南&#xff1a;从零开始的完整实现网络服务器基础概念网络服务器是互联网基础设施的核心组件&#xff0c;它本质上是一个持续运行的程序&#xff0c;负责监听特定端口&#xff08;如HTTP服务的80端口或HTTPS的443端口&#xff09;&#xff0c;处理来自客…

819 机器学习-决策树2

一、决策树的算法信息增益&#xff1a;某个属性带来的熵增1、决策树三大经典算法• ID3 → 信息增益 信息增益&#xff1a;某个属性带来的熵增• C4.5 → 信息增益率 信息增益率&#xff1a;信息增益自身熵• CART → 基尼指数&#xff08;分类&#xff09;&#xff1b;平方误…

Objective-C 版本的 LiveEventBus 效果

想要 Objective-C 版本的 LiveEventBus 效果&#xff08;跨页面/跨模块通信&#xff0c;支持粘性和非粘性事件&#xff09;。在 iOS 里对应的就是 NSNotificationCenter&#xff0c;但是它 默认不支持粘性事件&#xff0c;所以如果你想要“粘性”&#xff0c;需要自己封装一层。…

WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析七

上一篇&#xff1a;WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析六 如果有错误欢迎指正批评&#xff0c;在此只作为科普和参考。 C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um\iphlpapi.h 文章目录CreateIpNetEntry&#xff1…

STM32F407VGT6从零建立一个标准库工程模板+VSCode或Keil5

一、前言 下载平台:STM32F407ZGT6 代码使用平台:VSCode 编译器:arm-none-aebi-gcc ---- 默认你已经安装 程序下载工具:STlink ---- 默认你拥有 批处理工具:make ---- 默认你已经安装 使用此方法可以不借助其它插件&#xff0c;例如:STM32EIDE。这个方法已经经过验证可以在STM3…

佩京VR党建工作站-党建VR系统-VR党建展厅

VR党建工作站是一种依托VR虚拟现实技术的数字化党建文化学习工具。它通过将丰富的学习内容植入到智慧党建科技产品中&#xff0c;构建出沉浸式的学习场景&#xff0c;从而创新了体验式学习模式&#xff0c;促进了党员的自主学习。VR党建工作站核心功能&#xff1a;1、了解实时新…

Kotlin 协程之Channel的概念和基本使用

前言 在 专栏 之前的文章中&#xff0c;我们已经知道了协程的启动、挂起、取消、异常以及常用的协程作用域等基础应用。 这些基础应用适合的场景是一次性任务&#xff0c;执行完就结束了的场景。 launch / async 适合的场景 网络请求数据库查询文件读写并行计算任务等等 而…

安装使用Conda

文章目录Linux安装 Conda&#xff08;Miniconda 或 Anaconda&#xff09;​Miniconda (轻量版)激活配置Windows安装配置 Conda​添加清华镜像源加速创建并激活 Conda 环境验证步骤​安装项目依赖运行项目Linux安装 Conda&#xff08;Miniconda 或 Anaconda&#xff09;​ Mini…