隨着技術的飛速發展和各種用戶對軟件的要求愈來愈高,軟件自己也變得愈來愈複雜,而後軟件設計人員開始採用各類方式進行開發,因而就有了咱們的分層架構、分模塊開發,來提升代碼的清晰和重用。針對於這一特性,maven也給予了相應的配置。spring
情景分析一:編程
咱們在開發過程當中,建立了2個以上的模塊,每一個模塊都是一個獨立的maven project,在開始的時候咱們能夠獨立的編譯和測試運行每一個模塊,可是隨着項目的不斷變大和複雜化,咱們指望可以使用簡單的操做來完成編譯等工做,這時Maven給出了聚合的配置方式。安全
聚合的特色:架構
一、pom文件的packaging必須是pommaven
二、核心配置:<modules>,每一個modules 的值都是一個當前pom的相對目錄測試
三、聚合的內容僅僅是一個pom.xml文件,並無/src,/test等目錄。優化
作面向對象編程的人都會以爲這是一個沒意義的問題,是的,繼承就是避免重複,maven的繼承也是這樣,它還有一個好處就是讓項目更加安全ui
情景分析二:咱們在項目開發的過程當中,可能多個模塊獨立開發,可是多個模塊可能依賴相同的元素,好比說每一個模塊都須要Junit,使用spring的時候,其核心jar也必須都被引入,在編譯的時候,maven-compiler-plugin插件也要被引入url
如何配置繼承:spa
一、pom文件的packaging必須是pom、
二、子模塊不聲明groupId和version的話就是隱式的繼承父模塊的groupId和version。
三、relativePath表明父模塊的pom地址,默認父pom在上一次目錄。
groupId:項目組ID,項目座標的核心元素
version: 項目版本, 項目座標的核心元素
description: 項目的描述信息
organization: 項目的組織信息
inceptionYear: 項目的創始年份
url: 項目的URL地址
developers: 項目開發者信息
contributors: 項目的貢獻者信息
distributionManagement: 項目的部署配置
issueManagement: 項目的缺陷跟蹤系統信息
ciManagement: 項目的持續集成系統信息
scm: 項目的版本控制系統信息
mailingLists: 項目的郵件列表信息
properties: 自定義的maven屬性
dependencies: 項目的依賴配置
dependencyManagement: 項目的依賴管理配置
repositories: 項目的倉庫配置
build: 包括項目的源碼目錄配置、輸出目錄配置、插件配置、插件管理配置等
reporting: 包括項目的報告輸出目錄配置、報告插件配置等
是的,maven的依賴管理就是來解決這個問題的
增長一個新的元素:dependencyManagement
從上面的列表中咱們發現dependencyManagement也是能夠被繼承的,這偏偏知足了咱們的須要,它既可以讓子模塊繼承到父模塊的依賴配置,又能保證子模塊依賴使用的靈活性
dependencyManagement的特性:在dependencyManagement中配置的元素既不會給parent引入依賴,也不會給它的子模塊引入依賴,僅僅是它的配置是可繼承的
最佳實踐:
這時候咱們就能夠在父POM中聲明這些依賴:
子模塊的POM繼承這些配置:子模塊繼承這些配置的時候,仍然要聲明groupId和artifactId,表示當前配置是繼承於父POM的,從而直接使用父POM的版本對應的資源
這個能夠有效的避免多個子模塊使用依賴版本不一致的狀況,有助於下降依賴衝突的概率。注:只有子模塊配置了繼承的元素,纔會真正的有效,不然maven是不會加載父模塊中聲明的元素。
<pluginManagement>
繼承細節相似 dependencyManagement