Maven工程聚合和繼承的意義

  聚合的意義:

  對(duì)于一個(gè)大型的項(xiàng)目,如果我們直接作為一個(gè)工程開發(fā),由于相互之間的依賴我們只能從頭到尾由一組人開發(fā),否則就會(huì)出現(xiàn)一個(gè)類好多人開發(fā),相互更改的混亂局面,這個(gè)時(shí)候我們就將項(xiàng)目進(jìn)行了橫向和縱向的拆分。

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

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

  橫向拆分后,每個(gè)功能模塊進(jìn)行了單獨(dú)的開發(fā)之后,項(xiàng)目整合的時(shí)候就需要有一個(gè)能夠整合這些項(xiàng)目或者模塊的工程,這就是所謂聚合工程的意義。

  建立聚合工程需要注意:

  1.該聚合項(xiàng)目本身也做為一個(gè)Maven項(xiàng)目,它必須有自己的POM

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

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

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

  5.relative path:每個(gè)module的值都是一個(gè)當(dāng)前POM的相對(duì)目錄

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

  7.習(xí)慣約定:為了方便構(gòu)建,通常將聚合模塊放在項(xiàng)目目錄層的最頂層,其它聚合模塊作為子目錄存在。這樣當(dāng)我們打開項(xiàng)目的時(shí)候,第一個(gè)看到的就是聚合模塊的POM

8.聚合模塊減少的內(nèi)容:聚合模塊的內(nèi)容僅僅是一個(gè)pom.xml文件,它不包含src/main/Java、src/test/java等目錄,因?yàn)樗皇怯脕韼椭渌K構(gòu)建的工具,本身并沒有實(shí)質(zhì)的內(nèi)容。

  9.聚合模塊和子模塊的目錄:他們可以是父子類,也可以是平行結(jié)構(gòu),當(dāng)然如果使用平行結(jié)構(gòu),那么聚合模塊的POM也需要做出相應(yīng)的更改。

  10 如果聚合項(xiàng)目的子模塊新建完成后進(jìn)行了刪除操作,一定要在聚合項(xiàng)目中pom.xml中的modules選項(xiàng)卡中將這個(gè)子模塊進(jìn)行刪除

  繼承的意義:

  繼承除了能夠避免重復(fù),還有一個(gè)好處就是讓項(xiàng)目更加安全

  繼承時(shí)需要注意;

  1.說到繼承肯定是一個(gè)父子結(jié)構(gòu),那么我們?cè)诰酆享?xiàng)目中來創(chuàng)建一個(gè)parent project

  2.<packaging>: 作為父模塊的POM,其打包類型也必須為POM

  3.結(jié)構(gòu):父模塊只是為了幫助我們消除重復(fù),所以它也不需要src/main/java、src/test/java等目錄

  4.新的元素:<parent> , 它是被用在子模塊中的

  5.<parent>元素的屬性:<relativePath>: 表示父模塊POM的相對(duì)路徑,在構(gòu)建的時(shí)候,Maven會(huì)先根據(jù)relativePath檢查父POM,如果找不到,再從本地倉庫查找

  6.relativePath的默認(rèn)值: ../pom.xml

  7.子模塊省略groupId和version: 使用了繼承的子模塊中可以不聲明groupId和version, 子模塊將隱式的繼承父模塊的這兩個(gè)元素


總結(jié):

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

  對(duì)于繼承關(guān)系的父POM來說,它不知道自己被哪些子模塊繼承了,對(duì)于子POM來說,它必須知道自己的父POM是誰

  在一些最佳實(shí)踐中我們會(huì)發(fā)現(xiàn):一個(gè)POM既是聚合POM,又是父POM,這么做主要是為了方便。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 目錄 聚合1.1 為啥需要分模塊開發(fā)?1.2 為啥需要聚合?1.3 如何使用聚合?1.4 實(shí)際方案(方案一...
    良辰夜閱讀 1,064評(píng)論 0 49
  • 概述:當(dāng)前軟件設(shè)計(jì)人員會(huì)對(duì)軟件劃分模塊,以得到更清晰的設(shè)計(jì)及更高的重用性。簡(jiǎn)單來說,Maven的聚合特性就是將項(xiàng)目...
    SonyaBaby閱讀 581評(píng)論 0 0
  • 用了 Maven 好幾年了,許多人還是只懂得簡(jiǎn)單的依賴坐標(biāo)。對(duì)于 Maven 的聚合和繼承還是一知半解,甚至很多人...
    java菜閱讀 324評(píng)論 0 0
  • 何為Maven的聚合 假設(shè)有這么一個(gè)場(chǎng)景,有ABC三個(gè)項(xiàng)目,需要一次構(gòu)建三個(gè)項(xiàng)目,而不是分別到每個(gè)項(xiàng)目下面執(zhí)行mv...
    超級(jí)大雞腿閱讀 602評(píng)論 0 0
  • maven是一款優(yōu)秀的服務(wù)構(gòu)建工具,基于約定優(yōu)于配置原則,提供標(biāo)準(zhǔn)的服務(wù)構(gòu)建流程。maven的優(yōu)點(diǎn)不僅限于服務(wù)構(gòu)建...
    zhipingChen閱讀 4,064評(píng)論 0 4

友情鏈接更多精彩內(nèi)容