Maven 聚合與繼承

經濟人發表於2020-07-12

一. 聚合

  隨著技術的飛速發展和各類使用者對軟體的要求越來越高,軟體本身也變得越來越複雜,然後軟體設計人員開始採用各種方式進行開發,於是就有了我們的分層架構、分模組開發,來提高程式碼的清晰和重用。針對於這一特性,maven也給予了相應的配置。

  我們在開發過程中,建立了2個以上的模組,每個模組都是一個獨立的maven project,在開始的時候我們可以獨立的編譯和測試執行每個模組,但是隨著專案的不斷變大和複雜化,我們期望能夠使用簡單的操作來完成編譯等工作,這時Maven給出了聚合的配置方式。

  所謂聚合,顧名思義,就是把多個模組或專案聚合到一起,我們可以建立一個專門負責聚合工作的Maven 工程。

  建立該project的時候,我們要注意以下幾點:

    1. 聚合模組本身也做為一個Maven專案,它必須有自己的POM

    2. 它的打包方式必須為: pom

    3. 引入了新的元素:modules---module

    4. 版本:聚合模組的版本和被聚合模組版本一致

    5. 相對目錄:每個module的值都是一個當前POM的相對目錄

    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, 子模組將隱式的繼承父模組的這兩個元素

三. 聚合與繼承的區別

 

  聚合和繼承通常是結合使用的,但是其作用是不同的。聚合是將多個模組的工程匯聚到一起,而繼承則是指明某個模組工程要繼承另一個模組功能。

相關文章