Maven聚合與繼承
1、聚合
爲了可以使用一條命令就能構建 account-email和 account-persist兩個模塊,咱們須要創建一個額外的名爲 account-aggregator的模塊,而後經過該模塊構建整個項目的全部模塊。 account-aggregator自己也是個 Maven項目,它的 POM以下
Xml代碼 收藏代碼
<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的值是一個以當前POM爲主目錄的相對路徑。
2、繼承
可聲明父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>
注意:
一、子模塊沒有聲明groupId和version, 這兩個屬性繼承至父模塊。但若是子模塊有不一樣與父模塊的 groupId、version ,也可指定;
二、不該該繼承artifactId,若是groupId ,version,artifactId 徹底繼承的話會形成座標衝突;另外即便使用不一樣的 groupId或version,一樣的 artifactId也容易產生混淆。
三、使用繼承後 parent也必須像自模塊同樣加入到聚合模塊中。也就是在在聚合模塊的 pom中加入<module>account-parent</module>
3、聚合與繼承的關係
區別 :
1.對於聚合模塊來講,它知道有哪些被聚合的模塊,但那些被聚合的模塊不知道這個聚合模塊的存在。
2.對於繼承關係的父 POM來講,它不知道有哪些子模塊繼承與它,但那些子模塊都必須知道本身的父 POM是什麼。
共同點 :
1.聚合 POM與繼承關係中的父POM的 packaging都是pom
2.聚合模塊與繼承關係中的父模塊除了 POM以外都沒有實際的內容。
Maven聚合關係與繼承關係的比較
注:在現有的實際項目中一個 POM既是聚合POM,又是父 POM,這麼作主要是爲了方便
4、Maven可繼承的POM 元素
groupId :項目組 ID ,項目座標的核心元素;
version :項目版本,項目座標的核心元素;
description :項目的描述信息;
organization :項目的組織信息;
inceptionYear :項目的創始年份;
url :項目的 url 地址
develoers :項目的開發者信息;
contributors :項目的貢獻者信息;
distributionManagerment :項目的部署信息;
issueManagement :缺陷跟蹤系統信息;
ciManagement :項目的持續繼承信息;
scm :項目的版本控制信息;
mailingListserv :項目的郵件列表信息;
properties :自定義的 Maven 屬性;
dependencies :項目的依賴配置;
dependencyManagement :醒目的依賴管理配置;
repositories :項目的倉庫配置;
build :包括項目的源碼目錄配置、輸出目錄配置、插件配置、插件管理配置等;
reporting :包括項目的報告輸出目錄配置、報告插件配置等ui