大家好--歡迎大家來到上海尚學堂學習基地~
在軟件開發中,把一個大項目分拆為多個模塊是降低軟件複雜度的有效方法:
<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乾貨知識