「乾貨分享」模塊化編程和maven配置實踐一則

封面html

說到模塊化編程,對我我的而言首先原由於團隊協做的須要,也就是組織架構結構特色來決定,而不是跟風求得自我認同,看看咱們團隊的組織結構:git

 

其中:web

基礎平臺部職責:算法

一、AI實驗室:語音,圖像識別算法持續優化;垂直領域不一樣業務場景下持續提升算法精準度指標;產出通用算法基礎服務組件,爲基礎平臺作支持。spring

二、基礎平臺組:全部非業務相關的組件的開發:如:緩存,消息,傳輸,數據庫交互,虛擬化等通用組件;非業務相關係統的開發,如:運維平臺,交換平臺,門戶平臺,統一用戶門臺,監控平臺等;集成深度學習實驗室基礎服務組件。最終產出通用基礎平臺,爲產品和項目開發提供基礎服務支撐。數據庫

三、產品和項目上線及平常運維,基於已有運維平臺爲產品部和項目部提供產品上線支撐以及平常運維工做。編程

該部門下設:部門經理,AI研發經理,基礎平臺經理緩存

產品開發部職責:tomcat

根據產品部門的規劃設計,開發可複用的行業產品,負責多個產品線的開發和迭代。架構

該部門下設:部門經理,產品開發經理。

項目開發部職責:

負責項目類軟件的全週期實施管理,項目集成中的軟件部分以及產品的二次開發。

該部門下設:部門經理(相似於PMO),項目經理,開發經理。

其餘兩個部門和本次內容無關,簡單介紹以下:

產品部負責部分售前工做,產品規劃,產品設計,產品管理,專利和著做權相關工做。

QA負責軟件測試和質量管理。

~迴歸正題~

因爲組織結構的特色,要求軟件開發必須組件化,特別是基礎平臺部,各個組件都是能夠單獨應用到產品和項目軟件中,就想手機是一個產品,裏面的元器件如cpu,內存,相機都是可插拔的。

那麼maven的模塊化配置就很是有用了(在沒使用maven以前,採用的是eclipse打包以後,cmd命令install組件化jar文件到倉庫的方式)。

maven的模塊化網上已經不少了,無外乎一個parent,一堆子項目。而後parent配置的依賴和插件均可以在子項目中用。這裏對模塊化的配置就不詳說了。

這裏講一個模塊化的細節場景:

場景:基礎平臺中某些包含界面視圖(如jsp,vm等)的通用化功能單元,要求可做爲jar供其餘項目或產品直接在代碼中調用,而不是用的時候將jsp複製到項目中或者獨部署基礎平臺經過服務的方式調用。同時又要求可打包成war在基礎平臺開發中調試。

那麼就要求在基礎平臺打包的過程當中能同時打成war和jar包,而且jar中包含全部界面視圖文件。

對jar包中靜態資源(jsp,js,png,tld等)的訪問,利用了meta-info這個文件夾的特性。

有人說這個特性是server3.0的特性,應該不是(具體是何時支持的,本身可查閱),早期的struts和spring都已經使用這個特性了,只不過放的是tld文件(自定義標籤)。

meta-info對於jar來講是用來描述與該應用相關的各種元數據的地方,好比裏面的MANIFEST.MF,一般用來描述啓動參數:如main方法所在類,依賴包等。還好比servlet3.0中模塊化的描述文件web-fragment.xml等。

咱們一般將靜態文件如:jsp放在webapp/WEB-INF下,那麼對於jar,它的根目錄/META-INF/resources/WEB-INF就如同webapp/WEB-INF,只不過不用於加載web.xml等文件。那麼打包的時候只要將webapp/WEB-INF下的目錄拷貝到src/main/resources下便可(此目錄下的全部文件都會打包到jar包的跟目錄,也就是classpath下)。

示例

這裏經過一個例子來講明如何將基礎平臺打包成war的同時連同jsp打包成jar,最後供項目開發調用的具體過程。

開發環境:

eclispe Oxygen Release (4.7.0);

maven 3.2.2

項目結構:

 

其中core-web是基礎平臺(Core)的一部分,主要是通用的含有界面的模塊化組件,咱們計劃將其打包成jar並在busuness-prj項目直接調用。

其餘幾個項目相似這裏不作配置講解,可下載代碼後查看,這裏只講解core-web。

一下是core-web的程序結構,包含了一個通用模塊,這裏假設爲a模塊,經過spring mvc來實現,具體的spring的配置下載後看代碼,這裏篇幅問題就不寫了,項目結構以下:

 

爲了測試,模塊A的界面就簡單設計一下,如打印一下當前時間。

 

主要用到了如下maven插件:

maven-antrun-plugin;打包前文件拷貝;

maven-jar-plugin;打jar包;

maven-war-plugin;打war包。

jetty-maven-plugin;jetty運行(非必須,能夠將打好的war放在tomcat等容器中運行,這裏只是圖個方便);

關於這幾個插件的詳細配置,這裏只用了基本配置,不作詳細說明,網上應該有不少文章了。

具體maven配置以下:

 

運行maven:clean package,在eclipse中配置這個命令便可,以下:

 

打完包後,target中會同時出現jar和war包,以下:

 

其中jar的結構以下,成功的將web-inf下的文件打包進了jar文件:

 

接下來運行maven:install,將jar文件install到倉庫裏(項目右鍵run as ->maven install便可)。

接下來只要在business-prj中配置對此core-web的jar依賴便可,具體配置以下:

 

運行jetty,一樣在eclipse中配置jetty啓動,以下:

 

啓動以後,地址欄輸入:localhost:8080/a/list.do。便可直接在項目中使用基礎平臺的組件了,固然business-prj也須要配置SpringMvc的支撐(web.xml等文件中要添加具體配置,具體配置下載項目查看)。

~以上就是本次分享的所有內容~

maven的配置中你們有遇到不少問題,可一塊兒討論。


以上示例基本實現了基礎平臺部門與產品及項目開發部門的協同開發,固然協同開發還有不少方面,好比git的協同,溝通的協同等不少方面,後面有時間會陸續分享。

已分享的相關文章推薦閱讀:

大話團隊的GIT分支策略進化史

項目協做管理平臺-teambition和tapd--深度體驗

項目原件下載

爲防止地址失效,全部下載連接都在公衆號維護,請關注公衆號後,回覆「R001」 獲取本次分享的項目。

相關文章
相關標籤/搜索