隨着技術的飛速發展和各種用戶對軟件的要求愈來愈高,軟件自己也變得愈來愈複雜,而後軟件設計人員開始採用各類方式進行開發,因而就有了咱們的分層架構、分模塊開發,來提升代碼的清晰和重用。針對於這一特性,maven也給予了相應的配置。java
咱們在開發過程當中,建立了2個以上的模塊,每一個模塊都是一個獨立的maven project,在開始的時候咱們能夠獨立的編譯和測試運行每一個模塊,可是隨着項目的不斷變大和複雜化,咱們指望可以使用簡單的操做來完成編譯等工做,這時Maven給出了聚合的配置方式。spring
所謂聚合,顧名思義,就是把多個模塊或項目聚合到一塊兒,咱們能夠創建一個專門負責聚合工做的Maven 工程。架構
創建該project的時候,咱們要注意如下幾點:maven
1. 聚合模塊自己也作爲一個Maven項目,它必須有本身的POM工具
2. 它的打包方式必須爲: pom測試
3. 引入了新的元素:modules---module網站
4. 版本:聚合模塊的版本和被聚合模塊版本一致spa
5. 相對目錄:每一個module的值都是一個當前POM的相對目錄.net
6. 目錄名稱:爲了方便的快速定位內容,模塊所處的目錄應當與其artifactId一致(Maven約定而不是硬性要求),總之,模塊所處的目錄必須和<module>模塊所處的目錄</module>相一致。插件
7. 習慣約定:爲了方便構建,一般將聚合模塊放在項目目錄層的最頂層,其它聚合模塊做爲子目錄存在。這樣當咱們打開項目的時候,第一個看到的就是聚合模塊的POM
8. 聚合模塊減小的內容:聚合模塊的內容僅僅是一個pom.xml文件,它不包含src/main/Java、src/test/java等目錄,由於它只是用來幫助其它模塊構建的工具,自己並無實質的內容。
9. 聚合模塊和子模塊的目錄:他們能夠是父子類,也能夠是平行結構,固然若是使用平行結構,那麼聚合模塊的POM也須要作出相應的更改。
咱們在項目開發的過程當中,可能多個模塊獨立開發,可是多個模塊可能依賴相同的元素,好比說每一個模塊都須要Junit,使用spring的時候,其核心jar也必須都被引入,在編譯的時候,maven-compiler-plugin插件也要被引入。這時咱們採用繼承,就不用在每一個子模塊分別定義了。
如何配置繼承:
1. 說到繼承確定是一個父子結構,那麼咱們在父工程中來建立一個parent project
2. <packaging>: 做爲父模塊的POM,其打包類型也必須爲POM
3. 結構:父模塊只是爲了幫助咱們消除重複,因此它也不須要src/main/java、src/test/java等目錄
4. 新的元素:<parent> , 它是被用在子模塊中的
5. <parent>元素的屬性:<relativePath>: 表示父模塊POM的相對路徑,在構建的時候,Maven會先根據relativePath檢查父POM,若是找不到,再從本地倉庫查找
6. relativePath的默認值: ../pom.xml
7. 子模塊省略groupId和version: 使用了繼承的子模塊中能夠不聲明groupId和version, 子模塊將隱式的繼承父模塊的這兩個元素
聚合和繼承一般是結合使用的,可是其做用是不一樣的。聚合是將多個模塊的工程匯聚到一塊兒,而繼承則是指明某個模塊工程要繼承另外一個模塊功能。