1. 程式人生 > 其它 >Maven聚合

Maven聚合

在實際的開發過程中,我們所接觸的專案一般都由多個模組組成。在構建專案時,如果每次都按模組一個一個地進行構建會十分得麻煩,Maven 的聚合功能很好的解決了這個問題。

聚合

使用 Maven 聚合功能對專案進行構建時,需要在該專案中額外建立一個的聚合模組,然後通過這個模組構建整個專案的所有模組。聚合模組僅僅是幫助聚合其他模組的工具,其本身並無任何實質內容,因此聚合模組中只有一個 POM 檔案,不像其他的模組一樣包含 src/main/java、src/test/java 等多個目錄

與父模組相似,聚合模組的打包方式(packaging)也是 pom,使用者可以在其 POM 中通過modules 下的 module 子元素來新增需要聚合的模組的目錄路徑。

修改 Root 模組 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.biancheng.www</groupId>
    <artifactId>Root</artifactId>
    <version>1.0
</version> <!--定義的父類pom.xml 打包型別使pom --> <packaging>pom</packaging> <properties> <!-- 定義一些屬性 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <log4j.version>1.2.17</log4j.version> <junit.version>4.9
</junit.version> <system.version>1.0</system.version> <mysql.connector.version>5.1.18</mysql.connector.version> <c3p0.version>0.9.1</c3p0.version> </properties> <!--dependencyManagement 標籤用於控制子模組的依賴版本等資訊 --> <!-- 該標籤只用來控制版本,不能將依賴引入 --> <dependencyManagement> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <!--引用的properties標籤中定義的屬性 --> <version>${log4j.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <!--引用的properties標籤中定義的屬性 --> <version>${junit.version}</version> <!-- <scope>test</scope> --> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <!--引用的properties標籤中定義的屬性 --> <version>${mysql.connector.version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <!--引用的properties標籤中定義的屬性 --> <version>${c3p0.version}</version> </dependency> </dependencies> </dependencyManagement> <!--新增需要聚合的模組--> <modules> <module>../App-Core-lib</module> <module>../App-Data-lib</module> <module>../App-UI-WAR</module> </modules> </project>

開啟命令列視窗,跳轉到 Root 模組所在目錄,執行以下 Maven 命令,對 Root 進行構建。

mvn clean install

命令直接結果如下圖。

圖1:Maven 聚合構建

聚合模組在構建時,Maven 會先解析聚合模組的 POM、分析需要構建的模組,並根據這些模組之間的關係計算出構建順序,然後根據這個順序依次構建各個模組。

構建完成後輸出的是一個專案構建的小結報告,該報告中包括各個模組構建成功與否、構建花費的時間、以及整個構建構成所花費的時間等資訊。

繼承和聚合的關係

在實際的專案中,一個模組往往既是聚合模組又是其他專案的父模組,那麼 Maven 的繼承和聚合的關係是如何的呢?

Maven 的繼承和聚合的目的不同,繼承的目的是為了消除 POM 中的重複配置,聚合的目的是為了方便快速的構建專案

對於繼承中的父模組來說,它跟本不知道那些模組繼承了它,但子模組都知道自己的父模組是誰。

對於聚合模組來說,它知道哪些模組被聚合了,但那些被聚合的模組根本不知道聚合模組的存在。

兩者在結構和形式上還是有一定的共同點的,最直觀的就是兩者的打包方式都是 pom,兩者除了 POM 外都沒有實際的程式碼內容