Maven 多模塊配置、管理

隨着項目的不斷髮展,需求的不斷細化與添加,代碼愈來愈多,結構也愈來愈複雜,這時候就會遇到各類問題bash

  • 不一樣方面的代碼之間相互耦合,這時候一系統出現問題很難定位到問題的出現緣由,即便定位到問題也很難修正問題,可能在修正問題的時候引入更多的問題。架構

  • 多方面的代碼集中在一個總體結構中,新入的開發者很難對總體項目有直觀的感覺,增長了新手介入開發的成本,須要有一個熟悉整個項目的開發者維護整個項目的結構(一般在項目較大且開發時間較長時這是很難作到的)。maven

  • 開發者對本身或者他人負責的代碼邊界很模糊,這是複雜項目中最容易遇到的,致使的結果就是開發者很容易修改了他人負責的代碼且代碼負責人還不知道,責任追蹤很麻煩。ide

將一個複雜項目拆分紅多個模塊是解決上述問題的一個重要方法。 拆分的好處微服務

  • 多模塊的劃分能夠下降代碼之間的耦合性(從類級別的耦合提高到jar包級別的耦合)
  • 每一個模塊均可以是自解釋的(經過模塊名或者模塊文檔)
  • 模塊還規範了代碼邊界的劃分,開發者很容易經過模塊肯定本身所負責的內容
  • ...

模塊拆分策略

推薦安照功能拆分,後期方便轉換成微服務架構post

按職責劃分

  • --module-test
    • --module-test-service
    • --module-test-po
    • --module-test-controller
    • --module-test-dao
    • --module-test-common
    • --module-test-util

按功能拆分

例如,在電商系統中以下module測試

  • --module-test
    • --module-test-common公共部分
    • --module-test-order訂單
    • --module-test-checkout購物車
    • --module-test-pay支付
    • --module-test-catory類目
    • --module-test-product商品
    • --module-test-price價格
    • --module-test-account帳號

搭建多模塊項目

搭建多模塊項目,須要使用 maven 的繼承和聚合,其中聚合負責將多個模塊集中在一塊兒進行管理,繼承則負責各子模塊中的公共配置idea

建立項目

我使用的是ideaspa

刪掉srccode

pom文件內容

建立子模塊

在項目下建立子模塊

套路與建立普通項目一致

注意變化

module 的 pom 文件發生了變化

新增了兩段配置

<packaging>pom</packaging>

<modules>
    <module>module-util</module>
</modules>
複製代碼

pom 是最簡單的打包類型。不像jar和war,它生成的構件只有它自己。將 packaging 申明爲 pom 則意味着沒有代碼須要測試或者編譯,也沒有資源須要處理。

因爲咱們使用了聚合,因此打包方式必須爲pom,不然沒法構建。

<modules>
    <module>module-util</module>
</modules>
複製代碼

module的值是子模塊相對於當前 POM 的路徑

再看子模塊中的 pom

也是分紅兩個部分

<parent>
    <groupId>com.wqlm</groupId>
    <artifactId>module</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>module-util</artifactId>
複製代碼
<parent>
    <groupId>com.wqlm</groupId>
    <artifactId>module</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--<relativePath/>-->
</parent>
複製代碼

聲明瞭該模塊繼承自 com.wqlm:module:1.0-SNAPSHOT,其實這裏面還省略了 <relativePath></relativePath> 因爲 relativePath 默認是 ../pom.xml 而咱們的子項目確實在父項目的下一級目錄中,因此是能夠不用填寫的

Maven首先在當前構建項目的環境中查找父pom,而後項目所在的文件系統查找,而後是本地存儲庫,最後是遠程repo。

artifactId 是子模塊的組件id,因爲繼承了父pom,因此groupIdversion 也能夠不寫,不寫的話就默認繼承自父pom

使用多模塊

如上所示,在建立多個模塊以後,能夠在父pom中添加公共配置,而後全部的子模塊都會繼承這些配置。除此以外,還能夠通用對子模塊進行 編譯、打包、安裝... 操做

子模塊間的依賴

若是子模塊間有依賴關係,須要在 dependency 中引入要依賴的子模塊,如圖

上圖中子模塊 module-common:1.0-SNAPSHOT 依賴了 module-util:1.0-SNAPSHOT。有一個問題不知道你們想過沒,子模塊間相關依賴,並且還有關係版本號,相互依賴一多起來,版本號很容易衝突。

解決這個問題的辦法也很簡單,就是使用** maven dependencyManagement**。 在父pom中加入 dependencyManagement

而後子模塊中引用時,就能夠不帶版本號了
只要因此子模塊都經過這種方式來引用其餘子模塊,那麼在子模塊的版本就都是父項目中定義都版本

關於 maven dependencyManagement 詳情請參考 maven 依賴版本管理——depencyManagement

相關文章

maven 繼承

maven 聚合

相關文章
相關標籤/搜索