前一天介紹了繼承的觀念,透過繼承的觀念我們可以將模組的共同使用的dependency抽到父層的pom進行統一管理,同樣的也可以對plugin一致性的進行管理,或是設置共用的參數供子模組使用,但是這樣我們是不是可以透過父層的pom對整體專案進行整體的構建呢,只要我們再進行設置聚合就可以達到
Maven 聚合是一種讓父專案中執行一個命令,就同時對所有子模組進行構建的動作,可以透過在父層pom.xml設定<modules>
讓其了解一整包專案的架構,它能夠自動識別模組間的關係,讓構建的時候能一鍵完成
延續前一日的範例,可以看到其實專案在我們設定好父層pom.xml的<package>
為pom後,針對我們後續增加的project對子模組pom加入了<parent>
,同時也對父層pom加入了<modules>
透過mvn package
一鍵完成所有模組的構建
當然一般專案沒有那麼單純,我們來設定一下模組之間的相依來看看它是否能夠正常構建,設定模組依賴如下:
<!-- web module add dependency -->
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- service module add dependency -->
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>core</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- core module add dependency -->
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>infrastructure</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
執行 mvn package
後,您會發現 Maven 能夠正確構建整個專案!這是因為 Maven 的 Reactor 機制在背後分析模組間的依賴關係,並自動按正確順序進行構建:
構建順序:infrastructure → core → service → web
你會在構建時發現Reactor Build Order
構建結果
假設你只想打包core模組該可以使用以下兩種方式
相關依賴模組一起打包
如果是針對單一模組打包可以下mvn clean package -pl core -am
,-pl是指projece,-am是指--also-make,可以由‵mvn -h‵查看詳細說明
先安裝相依模組到local repository
先在父層pom資料夾下執行mvn install
,將專案安裝置loca repository
mvn clean install
會在本地倉庫看到相關的套件
mvn clean package -pl core
看到package成功訊息
今天我們深入探討了 Maven 聚合機制,透過,Maven Reactor 自動分析模組依賴關係,能夠按正確順序構建模組。當然maven繼承可以獨立存在而沒有聚合,但因為一鍵完成構建的好處,往往兩者會伴隨出現。