modules標(biāo)簽使用
<modules> <module>api-a</module> <module>api-b</module> <module>api-c</module> </modules>
從字面意思來(lái)說(shuō),module就是模塊,而pom.xml中的modules也正是這個(gè)意思,用來(lái)管理同個(gè)項(xiàng)目中的各個(gè)模塊;如果maven用的比較簡(jiǎn)單,或者說(shuō)項(xiàng)目的模塊在pom.xml沒(méi)進(jìn)行劃分,那么此元素是用不到的;不過(guò)一般大一點(diǎn)的項(xiàng)目是要用到的。
如果我們的項(xiàng)目分成了好幾個(gè)模塊,那么我們構(gòu)建的時(shí)候是不是有幾個(gè)模塊就需要構(gòu)建幾次了(到每個(gè)模塊的目錄下執(zhí)行mvn命令)?當(dāng)然,你逐個(gè)構(gòu)建沒(méi)問(wèn)題,但是非要這么麻煩的一個(gè)一個(gè)的構(gòu)建嗎,那么簡(jiǎn)單的做法就是使用聚合,一次構(gòu)建全部模塊。
什么是maven聚合項(xiàng)目
maven聚合項(xiàng)目也就是多模塊項(xiàng)目,(根據(jù)項(xiàng)目需求,把功能或服務(wù)劃分成不同的模塊進(jìn)行開(kāi)發(fā),子模塊繼承父類(lèi)通過(guò)maven統(tǒng)一管理,聚合)
modules標(biāo)簽作用
項(xiàng)目A下有一個(gè)pom.xml。
項(xiàng)目A下有兩個(gè)module,每個(gè)module中有自己的pom.xml。
在項(xiàng)目A的pom中加入標(biāo)簽,將兩個(gè)module加入其中。
在構(gòu)建這個(gè)項(xiàng)目的時(shí)候,不需要深入每個(gè)module去單獨(dú)構(gòu)建,而只是在項(xiàng)目A下的pom.xml構(gòu)建,就會(huì)完成對(duì)兩個(gè)module的構(gòu)建。
如果項(xiàng)目下多module,modules標(biāo)簽的優(yōu)勢(shì)將更加明顯。
maven聚合項(xiàng)目實(shí)例
1, 建立一個(gè)普通的maven Java工程(并刪除掉src文件夾)
2, 建立子模塊child-a, child-b
注意:這里子模塊的父模塊為multi-module-deom
3, 最后 父模塊的pom.xml文件
子模塊的pom.xml文件
第三步:和普通的maven項(xiàng)目相比聚合項(xiàng)目有什么特點(diǎn)
和普通項(xiàng)目相比
聚合項(xiàng)目的父類(lèi)pom文件的packaging的值為pom
在父類(lèi)中有指向子類(lèi)的元素
在子類(lèi)的pom中有有指向父類(lèi)的元素,每個(gè)module的目錄結(jié)構(gòu)和一般的maven項(xiàng)目沒(méi)有區(qū)別
在父類(lèi)pom中添加的依賴(lài)在子pom中可以繼承。
各個(gè)module之間的關(guān)系是怎樣的
對(duì)于聚合模塊來(lái)說(shuō),它知道哪些被聚合的模塊,但那些被聚合的模塊不知道這個(gè)聚合模塊的存在。
對(duì)于繼承關(guān)系的父pom來(lái)說(shuō),它不知道有哪些子模塊繼承與它,但那些子模塊都必須知道自己的父pom是什么。