Maven基礎之模塊管理

大家好--歡迎大家來到上海尚學堂學習基地~

Maven基礎之模塊管理

在軟件開發中,把一個大項目分拆為多個模塊是降低軟件複雜度的有效方法:

<code>                        ┌ ─ ─ ─ ─ ─ ─ ┐
                          ┌─────────┐
                        │ │Module A │ │
                          └─────────┘
┌──────────────┐ split  │ ┌─────────┐ │
│Single Project│───────>  │Module B │
└──────────────┘        │ └─────────┘ │
                          ┌─────────┐
                        │ │Module C │ │
                          └─────────┘
                        └ ─ ─ ─ ─ ─ ─ ┘
/<code>

對於Maven工程來說,原來是一個大項目:

<code>single-project
├── pom.xml
└── src
/<code>

現在可以分拆成3個模塊:

<code>single-project
├── module-a
│   ├── pom.xml
│   └── src
├── module-b
│   ├── pom.xml
│   └── src
└── module-c
    ├── pom.xml
    └── src
/<code>

Maven可以有效地管理多個模塊,我們只需要把每個模塊當作一個獨立的Maven項目,它們有各自獨立的pom.xml。例如,模塊A的pom.xml:

模塊B的pom.xml:

可以看出來,模塊A和模塊B的pom.xml高度相似,因此,我們可以提取出共同部分作為parent:

注意到parent的packaging是pom而不是jar,因為parent本身不含任何java代碼。編寫parent的pom.xml只是為了在各個模塊中減少重複的配置。現在我們的整個工程結構如下:

<code>single-project
├── parent
│   └── pom.xml
├── module-a
│   ├── pom.xml
│   └── src
├── module-b
│   ├── pom.xml
│   └── src
└── module-c
    ├── pom.xml
    └── src
/<code>

如果模塊A依賴模塊B,則模塊A需要模塊B的jar包才能正常編譯:

中央倉庫

其實我們使用的大多數第三方模塊都是這個用法,例如,我們使用commons logging、log4j這些第三方模塊, 就是第三方模塊的開發者自己把編譯好的jar包發佈到maven的中央倉庫中。

私有倉庫

本地倉庫

但是我們不推薦把自己的模塊安裝到maven的本地倉庫,因為每次修改模塊b的源碼,都需要重新安裝, 容易出現版本不一致的情況

推薦的做法是模塊化編譯,在編譯的時候,告訴maven幾個模塊之間存在依賴關係,需要一塊編譯, maven就會自動按依賴順序編譯這些模塊

<code>
    模塊A
    模塊B
    模塊C

/<code>

Maven支持模塊化管理,可以把一個大項目拆成幾個模塊 可以通過繼承在parent的pom.xml統一定義重複配置 可以通過編譯多個模塊

關注上海尚學堂,獲取更多關於Java乾貨知識


分享到:


相關文章: