【Maven】聚合和繼承

00潤物無聲00發表於2017-02-19

  Maven的聚合特效能夠把專案的各個模組聚合在一起構建,而Maven的繼承特效能夠幫助抽取各模組相同的依賴和外掛配置。在簡化POM的同時,還能促進各個模組配置的一致性。


聚合

  我們想一次構建兩個專案,而不是到兩個模組的目錄下分別執行mvn命令,Maven聚合(多模組)這一特性為該需求服務;

  用於聚合的模組,本身是一個Maven專案,有自己的POM檔案;它的打包packaging的值必須為pom,否則無法構建;

  modules:實現聚合的最核心的配置,它的值是相對於當前POM的相對目錄;

  聚合模組中僅是一個pom.xml檔案,幫助聚合其他模組構建的工具,本身無實質的內容;

  執行mvn clean install命令時,Maven會解析聚合模組的POM,分析要構建的模組,並計算出一個反應堆構建順序(Reactor Build Order),然後根據這個順序依次構建各個模組;反應堆的所有模組組成的一個構建結構。


繼承:

  消除重複,避免重複帶來的多餘的勞動和更多的潛在的問題,使用繼承來消除重複;

  在父POM中宣告一些配置供子POM繼承,實現"一處宣告,多處使用"的目的。

  父模組的packaging為pom。

  Maven提供的<dependencyManagement>元素既能讓子模組繼承到父模組的依賴配置,又能保證子模組依賴使用的靈活性。在<dependencyManagement>元素下的依賴宣告不會引入實際的依賴,但是它能夠約束dependencies下的依賴使用。


依賴與繼承

  多模組Maven專案中的聚合與繼承目的是完全不同的。前者:為了方便快速構建專案,後者:為了消除重複配置;

  聚合模組:它知道哪些被聚合的模組,但那些被聚合的模組不知道這個聚合模組的存在;

  聚成的父POM,它不知道哪些子模組繼承於它,但哪些子模組必須知道自己的父POM是什麼;

  聚合和繼承的POM的packaging都是必須pom,同時,聚合模組與繼承關係中的父模組除了POM之外都沒有實質的內容;



相關文章