maven工程聚合和繼承的意義


  聚合的意義:

  對於一個大型的項目,如果我們直接作為一個工程開發,由於相互之間的依賴我們只能從頭到尾由一組人開發,否則就會出現一個類好多人開發,相互更改的混亂局面,這個時候我們就將項目進行了橫向和縱向的拆分。

  所謂的橫向的拆分就是我們平常說的三層架構,將項目分成了web層,service層、dao層(web層也被叫做表現層,service層也被叫做業務層,dao層也被持久層),可以理解為將一個功能模塊的不同調用過程進行了水平方向的拆分。

  所謂的縱向拆分就是將一個項目的多個功能模塊進行了,可以理解為為了完成一個系統,深度(縱向)分析需要有哪些功能,然后將這些功能獨立出來,進行了(縱向)拆分。

  橫向拆分后,每個功能模塊進行了單獨的開發之后,項目整合的時候就需要有一個能夠整合這些項目或者模塊的工程,這就是所謂聚合工程的意義。

  建立聚合工程需要注意:

  1.該聚合項目本身也做為一個Maven項目,它必須有自己的POM

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

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

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

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

  6.目錄名稱:為了方便的快速定位內容,模塊所處的目錄應當與其artifactId一致(Maven約定而不是硬性要求),總之,模塊所處的目錄必須和<module>模塊所處的目錄</module>相一致。

  7.習慣約定:為了方便構建,通常將聚合模塊放在項目目錄層的最頂層,其它聚合模塊作為子目錄存在。這樣當我們打開項目的時候,第一個看到的就是聚合模塊的POM

  8.聚合模塊減少的內容:聚合模塊的內容僅僅是一個pom.xml文件,它不包含src/main/Java、src/test/java等目錄,因為它只是用來幫助其它模塊構建的工具,本身並沒有實質的內容。

  9.聚合模塊和子模塊的目錄:他們可以是父子類,也可以是平行結構,當然如果使用平行結構,那么聚合模塊的POM也需要做出相應的更改。

  10 如果聚合項目的子模塊新建完成后進行了刪除操作,一定要在聚合項目中pom.xml中的modules選項卡中將這個子模塊進行刪除

  

  繼承的意義:

  繼承除了能夠避免重復,還有一個好處就是讓項目更加安全

  繼承時需要注意;

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

 

總結:

  對於聚合模塊來說,它知道有哪些被聚合的模塊,而對於被聚合的模塊來說,它們不知道被誰聚合了,也不知道它的存在

  對於繼承關系的父POM來說,它不知道自己被哪些子模塊繼承了,對於子POM來說,它必須知道自己的父POM是誰

  在一些最佳實踐中我們會發現:一個POM既是聚合POM,又是父POM,這么做主要是為了方便。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM