認識maven多模塊

介紹

Maven多模塊項目,適用於一些比較大的項目,通過合理項目拆分,實現代碼的複用,便於維護的管理,尤其是一些開源的框架,也是採用多模塊的方式,提供插件集成,用戶可以根據配置指定的模塊。

拆分規則

業務模塊拆分

在這裏插入圖片描述

按層拆分

在這裏插入圖片描述

聚合、繼承

1>聚合

我們在開發過程中,創建了2個以上的模塊,每個模塊都是一個獨立的maven project,在開始的時候我們可以獨立的編譯和測試運行每個模塊,但是隨着項目的不斷變大和複雜化,我們期望能夠使用簡單的操作來完成編譯等工作,這時Maven給出了聚合的配置方式。
所謂聚合,顧名思義,就是把多個模塊或項目聚合到一起,我們可以建立一個專門負責聚合工作的Maven 工程。

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

  1. 聚合模塊本身也做爲一個Maven項目,它必須有自己的POM
  2. 它的打包方式必須爲: pom
  3. 引入了新的元素:modules—module
  4. 版本:聚合模塊的版本和被聚合模塊版本一致
  5. 相對目錄:每個module的值都是一個當前POM的相對目錄
  6. 目錄名稱:爲了方便的快速定位內容,模塊所處的目錄應當與其artifactId一致(Maven約定而不是硬性要求),總之,模塊所處的目錄必須和模塊所處的目錄相一致。
  7. 習慣約定:爲了方便構建,通常將聚合模塊放在項目目錄層的最頂層,其它聚合模塊作爲子目錄存在。這樣當我們打開項目的時候,第一個看到的就是聚合模塊的POM
  8. 聚合模塊減少的內容:聚合模塊的內容僅僅是一個pom.xml文件,它不包含src/main/Java、src/test/java等目錄,因爲它只是用來幫助其它模塊構建的工具,本身並沒有實質的內容。
  9. 聚合模塊和子模塊的目錄:他們可以是父子類,也可以是平行結構,當然如果使用平行結構,那麼聚合模塊的POM也需要做出相應的更改。

2>繼承

我們在項目開發的過程中,可能多個模塊獨立開發,但是多個模塊可能依賴相同的元素,比如說每個模塊都需要Junit,使用spring的時候,其核心jar也必須都被引入,在編譯的時候,maven-compiler-plugin插件也要被引入。這時我們採用繼承,就不用在每個子模塊分別定義了。

如何配置繼承

  1. 說到繼承肯定是一個父子結構,那麼我們在父工程中來創建一個parent project
  2. : 作爲父模塊的POM,其打包類型也必須爲POM
  3. 結構:父模塊只是爲了幫助我們消除重複,所以它也不需要src/main/java、src/test/java等目錄
  4. 新的元素: , 它是被用在子模塊中的
  5. parent>元素的屬性:: 表示父模塊POM的相對路徑,在構建的時候,Maven會先根據relativePath檢查父POM,如果找不到,再從本地倉庫查找
  6. relativePath的默認值: …/pom.xml
  7. 子模塊省略groupId和version: 使用了繼承的子模塊中可以不聲明groupId和version, 子模塊將隱式的繼承父模塊的這兩個元素

3>聚合與繼承的區別

在這裏插入圖片描述

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

pom、war、jar類型的使用

1. pom工程:用在父級工程或聚合工程中。用來做jar包的版本控制。

是整個項目的父工程,它是一個pom工程。用來做整個項目的版本控制,也就是項目中所有要使用到的jar包的版本都集中由父工程管理。這樣你在寫其他工程pom文件中maven依賴時就不需要寫版本號了。當然所有的項目都要先繼承它纔行。

2. war工程:將會打包成war,發佈在服務器上的工程。如網站或服務。

這些工程都是要部署在服務器上的,所以要打包成war形式。這些工程有的是用戶通過瀏覽器直接訪問,有的是通過發佈服務被別的工程調用。

3. jar工程:將會打包成jar用作jar包使用。

這個就是打包成jar的工程。它就是存放一些其他工程都會使用的類,工具類。我們可以在其他工程的pom文件中去引用它,和引用別的jar包沒什麼區別。

如何依賴

  1. DepencyManagement應用場景
    當我們的項目模塊很多的時候,我們使用Maven管理項目非常方便,幫助我們管理構建、文檔、報告、依賴、scms、發佈、分發的方法。可以方便的編譯代碼、進行依賴管理、管理二進制庫等等。由於我們的模塊很多,所以我們又抽象了一層,抽出一個itoo-base-parent來管理子項目的公共的依賴。爲了項目的正確運行,必須讓所有的子項目使用依賴項的統一版本,必須確保應用的各個項目的依賴項和版本一致,才能保證測試的和發佈的是相同的結果。在我們項目頂層的POM文件中,我們會看到dependencyManagement元素。通過它元素來管理jar包的版本,讓子項目中引用一個依賴而不用顯示的列出版本號。Maven會沿着父子層次向上走,直到找到一個擁有dependencyManagement元素的項目,然後它就會使用在這個dependencyManagement元素中指定的版本號。
  2. Dependencies
    相對於dependencyManagement,所有生命在dependencies裏的依賴都會自動引入,並默認被所有的子項目繼承
    3、區別
    dependencies即使在子項目中不寫該依賴項,那麼子項目仍然會從父項目中繼承該依賴項(全部繼承)dependencyManagement裏只是聲明依賴,並不實現引入,因此子項目需要顯示的聲明需要用的依賴。如果不在子項目中聲明依賴,是不會從父項目中繼承下來的;只有在子項目中寫了該依賴項,並且沒有指定具體版本,纔會從父項目中繼承該項,並且version和scope都讀取自父pom;另外如果子項目中指定了版本號,那麼會使用子項目中指定的jar版本。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章