Maven-11聚合與繼承

一、聚合

爲了能夠使用一條命令就能構建account-email和account-persist兩個模塊,我們需要建立一個額外的名爲account-aggregator的模塊,然後通過該模塊構建整個項目的所有模塊。account-aggregator本身也是個Maven項目,它的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的值是一個以當前POM爲主目錄的相對路徑。

二、繼承

可聲明父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>
	<modules>
		<module>account-email</module>
		<module>account-persist</module>
	</modules>
</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>


注意:1、子模塊沒有聲明groupId和version,這兩個屬性繼承至父模塊。但如果子模塊有不同與父模塊的groupId,version也可指定;

            2、不應該繼承artifactId,如果groupId,version,artifactId完全繼承的話會造成座標衝突;另外即使使用不同的groupId或version,同樣的artifactId也容易產生混淆。
           3、使用繼承後parent也必須像自模塊一樣加入到聚合模塊中。也就是在在聚合模塊的pom中加入<module>account-parent</module>

三、聚合與繼承的關係

在現有的實際項目中一個POM既是聚合POM,又是父POM,這麼做主要是爲了方便

 

 

發佈了55 篇原創文章 · 獲贊 14 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章