maven的聚合和繼承
1. 聚合
項目開發過程中有多個模塊,如果一個工項目有多個模塊工程,如果對整個項目進行maven操作,例如使用maven分別單個進行install安裝到本地倉庫中。前面的方法操作比較麻煩,
爲了簡化這些操作,maven提供一種方式把這些模塊一起執行的操作叫做聚合(非官方描述)。
通過maven快速嚮導分別建立三個maven工程A、B、C,再建一個作爲聚合A、B、C的maven工程——可以依賴前面的三個工程,這裏且叫做together。 同時修改together的pom.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>
<groupId>com.bamboo</groupId>
<artifactId>aggregation-Together</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- pom用於parent和合成多個項目。我們需要增加相應的值給父pom,用於子項目繼承。 -->
<packaging>pom</packaging>
<name>aggregation-Together</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 聚合運行多個maven項目-->
<modules>
<module>../aggregation-A</module>
<module>../aggregation-B</module>
<module>../aggregation-C</module>
</modules>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
創建上面4個工程以後如下圖所示,A、B、C、together工程的target目錄都是空的。
這裏我們只對together的工程執行install操作後,發現A、B、C三個工程分別也執行了install操作,同時裏target目錄也有更新。如下:
2.繼承
開發過程中,通常需要把通用的固定構件抽到父模塊定義,然後讓子模塊繼承父模塊。如下例把junit的依賴抽到父類配置,子類繼承。
我們通過快速嚮導新建一個maven工程inherit-sub,未做任何修改前,目錄如下。
我們需要把inherit-sub工程的junit的依賴抽到父工程模塊裏,新建父maven工程inherit-parent,其pom文件 如下:
<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>
<groupId>com.bamboo</groupId>
<artifactId>inherit-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>inherit-parent</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 把繼承給子類的junit版本號抽到配置裏 -->
<junit.version>4.0</junit.version>
</properties>
<!-- 依賴管理(包含多個依賴列表),主要在父模塊中定義,子模塊繼承-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version> <!-- 使用配置裏的版本號 -->
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
現在修改inherit-sub的pom.xml,使其可以依賴父模塊定義的junit構件。然後繼承效果如下: