天天看點

談談maven多子產品

記得在校的時候,通常用的比較多是動态web工程,動态web工程導入最多就是jar包,這些jar包需要自己手動複制粘貼放入lib目錄下,然後build path,有的IDE會自動build path有的需要手動選中所有lib,然後build path。

後來工作了,用的最多的就是maven。maven簡單的說,它就是項目建構工具,你需要什麼依賴,就去maven庫中搜尋,然後找到你想要的依賴,将其複制到你的pom.xml檔案中,注意用<dependencies></dependencies>将依賴進行包含。

為什麼用maven?

給我感觸最深的就是之前用動态web工程建構項目,光導jar包就花了不少時間,我經常強調一句,jar包導對,你的項目基本成功了80%。這個項目指的是架構整合。如果導不對,錯誤都不好找。

而maven,隻需将找到的依賴放入pom.xml檔案中,就會自動去下載下傳這些依賴,當然maven倉庫最初是沒有任何依賴。

我用的是eclipse 氧氣版,自帶maven插件,大家可以去Eclipse官網去下載下傳 https://www.eclipse.org/downloads/  另外idea也自帶maven插件,雖然idea我幾乎沒用過,用的特别少,除了之前幫助一位朋友解決一些項目問題時,用過,其他時候用的最多的還是eclipse。

不說太多題外話,用maven最直接的原因就是不用為jar包發愁。

還有為什麼用maven?

讓項目結構更清晰規範,而且還更易擴充,動态web建構項目,擴充太不易了,特别是針對電商,金融一些大型網站而言。

對于maven而言用多子產品開發更好,比較符合解耦原則。

談談maven多子產品

這個是我很久之前建立的一個maven項目,這裡就不以動态web項目為例了。

這個maven項目并沒有多子產品,是以我從dao到service,乃至controller,或者以後加入redis或者內建第三方插件都要在這個項目下寫。

對于個人開發而言,這倒影響不大,但是假設它是一個大規模背景系統,多人進行開發,全部都在這一個項目下開發,即便使用git等版本控制工具進行代碼管理,使用git是為了讓代碼管理的更好,同時也是為了友善合并代碼比對。

早期團隊三四個開發一個項目還好,後來走了一部分人,來了幾個新手,新手的話,對代碼邏輯不是特别清楚,是以要一一細看,但是如果是如下所示:

談談maven多子產品

一共11個包,每個包至少有十幾二十個java類,但真實開發場景中,不隻11個包,特别是對于一些大型系統而言,三四十個包,假設三四十個包全部混合在一個項目下,每個包下至少三十個java類,對于新手而言熟悉代碼需要比較長的時間,這就增加了一定的成本。

說到這,maven多子產品就可以解決這個問題,還是以我的部落格為例:

下面是maven多子產品建構項目:

談談maven多子產品

總共五個項目,一個父工程,四個子工程。

父工程主要裝載着主要的依賴檔案

子工程分别有:

blog-common:主要放公共複用的類,例如常用工具類等

blog-core:主要放入核心類,例如aop,shiro或者redis等,當然也包括項目的主要核心代碼

blog-generator:代碼生成器

blog-web:controller常用放置地,包含相關的配置檔案,同時也可包含代碼生成器生成的代碼

目前隻有這幾個,但是大家試想,如果我要接入很多第三插件或者其他應用項目,我隻需增加子工程即可

而且我研究過ibase4j,jeesite,guns等github上的開源項目,他們的項目建構大多如此。

比如ibase4j,它是将項目分成這樣:

談談maven多子產品

簡單的說根據業務進行子產品分層

根據業務子產品分層也是maven建構多子產品項目常用的做法之一。

從中也可以看出多子產品真的符合解耦原則,正常的maven工程之是以不解耦是因為全部放置在一個工程裡,非常不符合解耦。

代碼耦合性重,隻會增加開發成本,降低效率,多子產品建構項目,讓業務更加清晰,更加規範,非常有利于項目開發效率。

我最近公司項目就使用這個,同時我個人的blog項目也打算采用這種開發方式。

今天隻是淺談,一時靈感,讓我忍不住想要分享。大家針對該随筆有更好的意見和想法,歡迎分享