一舷蟀、聚合
為了能夠使用一條命令就能構(gòu)建 account-email和 account-persist兩個(gè)模塊旺拉,我們需要建立一個(gè)額外的名為 account-aggregator的模塊孝鹊,然后通過該模塊構(gòu)建整個(gè)項(xiàng)目的所有模塊别智。 account-aggregator本身也是個(gè) Maven項(xiàng)目冈闭,它的 POM如下
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.juvenxu.mvnbook.account</groupId>
<artifactId>account-aggregator</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging> pom </packaging>
<name>Account Aggregator</name>
<modules>
<module>account-email</module>
<module>account-persist</module>
</modules>
</project>
注意:packaging的類型為pom ,module的值是一個(gè)以當(dāng)前POM**為主目錄的相對(duì)路徑册招。
二岔激、繼承
可聲明父POM供子 POM繼承
父模塊POM如下:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.juvenxu.mvnbook.account</groupId>
<artifactId> account-parent </artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Account Parent</name>
</project>
子模塊聲明繼承如下:
<project>
<modelVersion>4.0.0</modelVersion>
< parent >
<groupId>com.juvenxu.mvnbook.account</groupId>
<artifactId> account-parent </artifactId>
<version>1.0.0-SNAPSHOT</version>
< relativePath >../account-parent/pom.xml</ relativePath>
</ parent >
<artifactId> account-email </artifactId>
<name>Account Email</name>
...
</project>
最后,同樣還需要把 account-parent加入到聚合模塊account-aggregator中是掰。聚合的 POM如下:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.juvenxu.mvnbook.account</groupId>
<artifactId>account-aggregator</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging> pom </packaging>
<name>Account Aggregator</name>
<modules>
<module>account-email</module>
<module>account-persist</module>
<module> account-parent</module>
</modules>
</project>
注意:
1虑鼎、子模塊沒有聲明groupId和version, 這兩個(gè)屬性繼承至父模塊。但如果子模塊有不同與父模塊的 groupId、version 炫彩,也可指定匾七;
2、不應(yīng)該繼承artifactId,如果groupId 江兢,version昨忆,artifactId 完全繼承的話會(huì)造成坐標(biāo)沖突;另外即使使用不同的 groupId或version杉允,同樣的 artifactId也容易產(chǎn)生混淆扔嵌。
3、使用繼承后 parent也必須像自模塊一樣加入到聚合模塊中夺颤。也就是在在聚合模塊的 pom中加入<module>account-parent</module>
三、聚合與繼承的關(guān)系
區(qū)別 :
1.對(duì)于聚合模塊來說胁勺,它知道有哪些被聚合的模塊世澜,但那些被聚合的模塊不知道這個(gè)聚合模塊的存在。
2.對(duì)于繼承關(guān)系的父 POM來說署穗,它不知道有哪些子模塊繼承與它寥裂,但那些子模塊都必須知道自己的父 POM是什么。
共同點(diǎn) :
1.聚合 POM與繼承關(guān)系中的父POM的 packaging都是pom
2.聚合模塊與繼承關(guān)系中的父模塊除了 POM之外都沒有實(shí)際的內(nèi)容案疲。
注:在現(xiàn)有的實(shí)際項(xiàng)目中一個(gè) POM既是聚合POM封恰,又是父 POM,這么做主要是為了方便
四褐啡、Maven可繼承的POM 元素
groupId :項(xiàng)目組 ID 诺舔,項(xiàng)目坐標(biāo)的核心元素;
version :項(xiàng)目版本备畦,項(xiàng)目坐標(biāo)的核心元素低飒;
description :項(xiàng)目的描述信息;
organization :項(xiàng)目的組織信息懂盐;
inceptionYear :項(xiàng)目的創(chuàng)始年份褥赊;
url :項(xiàng)目的 url 地址
develoers :項(xiàng)目的開發(fā)者信息;
contributors :項(xiàng)目的貢獻(xiàn)者信息莉恼;
distributionManagerment :項(xiàng)目的部署信息拌喉;
issueManagement :缺陷跟蹤系統(tǒng)信息;
ciManagement :項(xiàng)目的持續(xù)繼承信息俐银;
scm :項(xiàng)目的版本控制信息尿背;
mailingListserv :項(xiàng)目的郵件列表信息;
properties :自定義的 Maven 屬性捶惜;
dependencies :項(xiàng)目的依賴配置残家;
dependencyManagement :醒目的依賴管理配置;
repositories :項(xiàng)目的倉庫配置售躁;
build :包括項(xiàng)目的源碼目錄配置坞淮、輸出目錄配置茴晋、插件配置、插件管理配置等回窘;
reporting :包括項(xiàng)目的報(bào)告輸出目錄配置诺擅、報(bào)告插件配置等。