Maven系列五:多模塊項目中的聚合和繼承

一、Maven項目的聚合

現在項目越來越複雜,一般情況下,一個項目包括多個模塊。

假設有個orchid項目,包括兩個模塊:orchid-server和orchid-support。

它們在文件系統的目錄結構如下所示

orchid
	--pom.xml
	--orchid-support
		--src
		--pom.xml
	--orchid-server
		--src
		--pom.xml

那麼如何把它們作爲一個多模塊的maven項目配置呢?

orchid/pom.xml的配置如下:

	<modelVersion>4.0.0</modelVersion>
	<groupId>com.stear.orchid</groupId>
	<artifactId>orchid</artifactId>
	<version>0.1</version>
	<packaging>pom</packaging>
	<name>orchid</name>
	<description>The orchid project of stear</description>
	<url>http://orchid.stear.com</url>
	<modules>
		<module>orchid-server</module>
		<module>orchid-support</module>
  	</modules>

這個pom.xml的配置關鍵在兩點:(1)packaging類型爲pom;(2)<modules>模塊的引入。

<module>orchid-server</module>

表示在當前目錄(也就是上面pom.xml所在目錄)包括一個文件夾orchid-server。如果orchid-server和orchid在同一目錄的話,那麼配置應該是

<module>../orchid-server</module>

二、Maven項目的繼承

在上面的例子中只有聚合,也就是說orchid-support和orchid-server是不知道有個總項目或者說父項目存在的,因爲我們沒有在orchid-support/pom.xml和orchid-server/pom.xml中加入任何東西。那麼orchid-support和orchid-server也是不能從orchid項目繼承任何東西的。如果需要繼承的話,那麼需要在子項目的配置中加入<parent>配置:

orchid-support:

	<modelVersion>4.0.0</modelVersion>
	<parent>
			<groupId>com.stear.orchid</groupId>
			<artifactId>orchid</artifactId>
			<version>1.0-SNAPSHOT</version>
	</parent>
	<artifactId>orchid-support</artifactId>


orchid-server:

	<modelVersion>4.0.0</modelVersion>
	<parent>
			<groupId>com.stear.orchid</groupId>
			<artifactId>orchid</artifactId>
			<version>1.0-SNAPSHOT</version>
	</parent>
	<artifactId>orchid-server</artifactId>
上面兩個配置在<parent>中都忽略了<relativePath>標籤,<relativePath>的默認值是../pom.xml,也就是從父目錄中尋找pom.xml。

如果你的父項目在其他地方,那麼要手工加入改配置

	<parent>
			<groupId>com.stear.orchid</groupId>
			<artifactId>orchid</artifactId>
			<version>1.0-SNAPSHOT</version>
			<relativePath>parent project orchid directory/pom.xml</relativePath>
	</parent>

這樣子項目可以從父項目中繼承元素。可繼承的元素包括:

groupId

version

description

organization

inceptionYear

url

developers

contributors

distributionManagement

issueManagement

ciManagement

scm

mailingLists

properties

dependencies

dependencyManagement

repositories

build

reporting

三、聚合和繼承的關係

聚合和繼承本質上沒什麼關係。聚合是爲了快速構建,只要在總項目中執行命令就會自動構建包含的某塊項目。繼承是爲了消除重複配置,各個子項目可以繼承父項目中的配置

對於聚合的總項目來說,它知道有哪些項目被聚合在一起,而各個模塊對總的項目是一無所知的。

對於繼承的父項目來說,它不知道哪些項目會繼承它,但是子項目明確指明瞭父項目。

通常來說,父項目和總項目是一個項目。也是爲了結構的清晰可見。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章