1.聚合 apache
一次構建多個項目模塊。 maven
2.繼承 ui
爲了消除重複,把不少相同的配置提取出來,例如groupid和version; url
2.1 Maven中能夠繼承的POM元素spa
groupId :項目組 ID ,項目座標的核心元素;
version :項目版本,項目座標的核心元素;
description :項目的描述信息;
organization :項目的組織信息;
inceptionYear :項目的創始年份;
url :項目的 url 地址
develoers :項目的開發者信息;
contributors :項目的貢獻者信息;
distributionManagerment :項目的部署信息;
issueManagement :缺陷跟蹤系統信息;
ciManagement :項目的持續繼承信息;
scm :項目的版本控制信息;
mailingListserv :項目的郵件列表信息;
properties :自定義的 Maven 屬性;
dependencies :項目的依賴配置;
dependencyManagement :醒目的依賴管理配置;
repositories :項目的倉庫配置;
build :包括項目的源碼目錄配置、輸出目錄配置、插件配置、插件管理配置等;
reporting :包括項目的報告輸出目錄配置、報告插件配置等。
3.示例 插件
3.1建立4個Maven項目,放在相同的目錄下,其中hello_parent爲父項目(聚合模塊),hello_1/hello_2/hello_3爲子項目(被聚合的模塊);hello_parent的POM既是聚合POM,又是父POM這麼作主要是爲了方便。 版本控制
3.1.1 hello_parent項目POMcode
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!-- 當前pom的版本號 --> <modelVersion>4.0.0</modelVersion> <!-- groupId: 當前jar所屬的命名空間 --> <groupId>cn.test.maven</groupId> <!-- 當前項目模塊名稱 --> <artifactId>parent</artifactId> <!-- 當前項目的版本, SNAPSHOT鏡像版 --> <version>0.0.1-SNAPSHOT</version> <!-- 聚合、父繼承的packaging必須是pom --> <packaging>pom</packaging> <!-- name提供一個相對容易讀的名字,合理配name字段,會讓Mavne的構建輸出更清晰 --> <name>Parent</name> <url>http://maven.apache.org</url> <!-- 定義要聚合的模塊 --> <modules> <!-- 每一個module的值都是當前pom的相對路徑 --> <module>../hello_ch1</module> <module>../hello_ch2</module> <module>../hello_ch3</module> </modules> <!-- 定義屬性 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit.version>4.9</junit.version> <maven.version>0.0.1-SNAPSHOT</maven.version> </properties> <!-- 用dependencyManagement進行jar包依賴管理 --> <dependencyManagement> <!-- 配置jar包依賴 --> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <!-- 訪問junit.version屬性 --> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>cn.test.maven</groupId> <artifactId>hello_ch1</artifactId> <!-- 訪問maven.version屬性 --> <version>${maven.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>cn.test.maven</groupId> <artifactId>hello_ch2</artifactId> <!-- 訪問maven.version屬性 --> <version>${maven.version}</version> </dependency> </dependencies> </dependencyManagement> </project>
/* 繼承的優勢:在父pom中定義共同的依賴關係,統一管理項目,確保應用的各個子模塊的依賴和版本一致。同時能夠避免在每一個子模塊中都聲明一個版本號,這樣在升級或者切換到另外一個版本時,只須要在父pom裏更新,不須要到每個子模塊裏修改;若是某個子模塊須要另一個版本時,只須要在其dependencies中聲明另外一個版本便可。子項目就會使用子pom中聲明的版本號,覆蓋父pom聲明的版本。 */
/* dependencies 全部聲明在dependencies裏的依賴都會自動引入,並默認被全部的子pom繼承。 dependencyManagement 只是聲明依賴,並不實際引入,所以子pom須要顯示的聲明須要用的依賴。若是不在子pom中聲明依賴,是不會從父pom中繼承下來的;只有在子pom中寫了該依賴項,而且沒有指定具體版本,纔會從父pom中繼承該項,而且version和scope都讀取自父pom;另外若是子pom中指定了版本號,那麼會使用子pom中指定的版本。 */
3.1.2 子項目1 POM(hello_ch1)xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>hello_ch1</artifactId> <!-- 繼承parent項目中的pom.xml配置 --> <parent> <groupId>cn.test.maven</groupId> <artifactId>parent</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 相對路徑 --> <relativePath>../hello_parent/pom.xml</relativePath> </parent> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies> </project>
/* parent標籤 artifactId 父pom的artifact標識符 groupId 父pom的group標識符 version 父pom的版本 relativePath 父項目的pom.xml文件的相對路徑。默認值爲../pom.xml。maven首先從當前構建項目開始查找父項目的pom文件,而後從本地倉庫,最有從遠程倉庫。RelativePath容許你選擇一個不一樣的位置。 */
3.1.3 子項目2 POM(hello_ch2)blog
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>hello_ch2</artifactId> <name>hello_ch2</name> <!-- 繼承parent項目中的pom.xml配置 --> <parent> <groupId>cn.test.maven</groupId> <artifactId>parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../hello_parent/pom.xml</relativePath> </parent> <dependencies> <dependency> <groupId>junit</groupId> <!-- hello_ch2使用junit 4.8;不繼承父pom中的 junit 4.9 --> <version>4.8</version> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>cn.test.maven</groupId> <artifactId>hello_ch1</artifactId> </dependency> </dependencies> </project>
3.1.4 子項目3 POM(hello_ch3)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>Hello</artifactId> <parent> <groupId>cn.test.maven</groupId> <artifactId>parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../hello_parent/pom.xml</relativePath> </parent> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>cn.test.maven</groupId> <artifactId>hello_ch2</artifactId> </dependency> </dependencies> </project>
4.在parent項目中構建: