天天看點

Maven--搭建多子產品企業級項目

一. 必要性   

所有用Maven管理的真實的項目都應該是分子產品的,每個子產品都對應着一個pom.xml。它們之間通過繼承和聚合(也稱作多子產品,multi-module)互相關聯。那麼,為什麼要這麼做呢?我們明明在開發一個項目,劃分子產品後,導入Eclipse變成了N個項目,這會帶來複雜度,給開發帶來不便。

為了解釋原因,假設有這樣一個項目,很常見的Java Web應用。在這個應用中,我們分了幾層:

  1. Dao層負責資料庫互動,封裝了Hibernate互動的類。
  2. Service層處理業務邏輯,放一些Service接口和實作相關的Bean。
  3. Web層負責與用戶端互動,主要有一些Structs的Action類。

對應的,在一個項目中,我們會看到一些包名:

  1. org.myorg.app.dao
  2. org.myorg.app.service
  3. org.myorg.app.web
  4. org.myorg.app.util

這樣整個項目的架構就清晰了,但随着項目的進行,你可能會遇到如下問題:

  1. 這個應用可能需要有一個前台和一個背景管理端(web或者swing),你發現大部分dao,一些service,和大部分util是在兩個應用中可。這樣的問題,你一周内遇到了好幾次。
  2. pom.xml中的依賴清單越來越長以重用的,但是,由于目前隻有一個項目(WAR),你不得不建立一個項目依賴這個WAR,這變得非常的惡心,因為在Maven中配置對WAR的依賴遠不如依賴JAR那樣簡單明了,而且你根本不需要org.myorg.app.web。有人修改了dao,送出到svn并且不小心導緻build失敗了,你在編寫service的代碼,發現編譯不過,隻能等那人把dao修複了,你才能繼續進行,很多人都在修改,到後來你根本就不清楚哪個依賴是誰需要的,漸漸的,很多不必要的依賴被引入。甚至出現了一個依賴有多個版本存在。
  3. build整個項目的時間越來越長,盡管你隻是一直在web層工作,但你不得不build整個項目。
  4. 某個子產品,比如util,你隻想讓一些經驗豐富的人來維護,可是,現在這種情況,每個開發者都能修改,這導緻關鍵子產品的代碼品質不能達到你的要求。

我們會發現,其實這裡實際上沒有遵守一個設計模式原則:“高内聚,低耦合”。雖然我們通過包名劃分了層次,并且你還會說,這些包的依賴都是單向的,沒有包的環依賴。這很好,但還不夠,因為就建構層次來說,所有東西都被耦合在一起了。是以我們需要使用Maven劃分子產品。

二. 怎麼做

   1. 建立pom根目錄,搭建多子產品項目,必須要有一個packaging為pom的根目錄。建立一個maven項目,pom.xml的檔案如下圖。:

Maven--搭建多子產品企業級項目

  2. 建立項目子產品

Maven--搭建多子產品企業級項目

輸入你的項目名稱

Maven--搭建多子產品企業級項目

這裡就不重複說建立項目了,建立好的目錄結構在eclipse中如下:

Maven--搭建多子產品企業級項目

備注:建立這些項目的時候,隻有easyframework-web是web項目即maven的:maven-archetype-webapp,其他的都是java項目:maven-archetype-quicktart

打開easyframework-root的pom.xml檔案,你會看到子產品化是這樣的:

Maven--搭建多子產品企業級項目