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
英文地址,請注明出處:http://en.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…