maven的聚合與繼承

maven的聚合

        當一個子項目下都多個模塊,咱們須要構建項目時廣泛的作法就是進入各個模塊逐一構建,可是這樣真的是最好的辦法麼?能不能一次構建兩個模塊呢?固然能夠,maven的聚合特性就是爲該需求服務的。maven

        要實現同時構建多個模塊,咱們須要在另外建立一個maven項目(聚合模塊),而後經過構建該模塊來構建其餘模塊。聚合模塊的pom樣例以下:spa

groupid、version:與被聚合模塊一致插件

artifactid:前綴與被聚合模塊一致日誌

packaging: 須要注意,與被聚合模塊不一樣,這裏的值爲pomxml

name:給項目提供一個更適合閱讀的名字,構建時日誌輸出的是這個名字,而不是artifactid繼承

modules:這裏能夠申明任意數量的modules來實現模塊的聚合,這裏的每一個moudule的值是當前這個pom的相對路徑io

        爲了方便用戶構建項目,通常是將聚合模塊放在項目目錄的最頂層,其餘模塊則作爲聚合模塊的子目錄存在。module

        固然也是可使用平行的目錄結構,可是響應的module的值要作相應的更改,記住,modules的值是當前pom的相對路徑。配置

maven繼承

        不少模塊有不少相同的maven配置以及相同的依賴。爲了可以減小重複,maven提供了繼承的特性。plugin

父模塊的例子:

要注意的是packaging的值爲pom,groupid、version和其餘子模塊一致,artifactid 表示這是一個父pom

子模塊繼承模塊的例子:

parent:申明父模塊

groupid 、artifactid、version  指定了父模塊的座標,這三個元素是必須的。

relativePath : 父模塊的pom相對路徑,默認值../pom.xml。構建時,maven會先從relativepath去找父pom,若是沒找到再取本地倉庫去找.

可繼承的常見元素有:

groupid ,version ,properties,dependencyManagement,distributionManagement等等,這裏不一一舉例。

依賴管理:

dependencyManagement

父pom的片斷以下:

properties :提取了相關依賴的版本

dependencyManagement : 申明瞭項目的依賴,可是該申明不會給當前父模塊引入依賴,也不會給子模塊映入依賴。可是這段配置倒是會被繼承的

子pom片斷:

若是子模塊須要使用父模塊裏申明的依賴,只須要配置 groupid 和 version 兩個元素便可。子模塊裏沒有配置,即便在父模塊裏申明瞭,也不會在子模塊映入依賴。

雖然這樣配置並不能減小太多的配置,可是在dependencyManagement統一申明瞭依賴版本,就避免了子模塊依賴版本不一致的問題。

插件管理:

pluginManagement

父pom片斷:

子pom片斷:

與依賴管理相似,這裏就不在重複說明。

聚合與繼承的關係

聚合:

一、主要是爲了快速構建項目

二、聚合模塊知道被聚合模塊,可是被聚合模塊不知道聚合模塊的存在

繼承:

一、主要是爲了消除重複

二、父模塊不知道哪些子模塊繼承了它,可是子模塊知道他們的父模塊

相同點:

一、pakaging都爲pom

二、除了pom以外無其餘內容

反應堆:

在多組件項目中,反應堆是全部模塊組成的一個構建結構;單模塊項目,反應堆就是項目自己。可是多模塊項目裏,反應堆包含了多模塊之間的繼承和依賴關係,從而可以自動計算出合理的模塊構建順序。

反應堆的構建順序:

maven按順序讀取pom,若是該模塊沒有依賴的模塊那麼就構建該模塊,若是有依賴的模塊就先去構建依賴的模塊,若是依賴的模塊還依賴與其餘模塊,那麼就進一步構建依賴的模塊。正確的反應堆應該是一個有向非循環圖。

剪裁反應堆:

若是用戶只想構建反應堆中的某些模塊,咱們就須要去剪裁反應堆。

主要的參數以下:

相關文章
相關標籤/搜索