注意:所有的編譯、打包、部署全部是通過Jenkins完成的。
公司內部有一個專案,開始做的時候已經預計到會有很多客服端。所以開發就搞瞭如下的結構:
fft-api # 公用的API,所有的程式都必須使用 fft-client-hubei # 湖北客戶端 fft-job # 定時任務 fft-persistent # 資料庫連線層 fft-persistent-api # 資料庫連線層API fft-server # 公用服務端。所有的客戶端都連線服務端,服務端去連線資料庫連線層。 pom.xml # 父級pom檔案,定義通用的配置
最開始的時候。因為專案簡單,所以直接全部編譯打包。然後從一堆產物中獲取需要的產物進行部署。
$ clean deploy -B -e -U -Dmaven.test.skip=true # 反應堆輸出日誌如下: [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] Froad FFT # 注意日誌中這個父級pom.xml的變化 [INFO] FFT Api [INFO] FFT-Persistent-Api [INFO] FFT Server [INFO] FFT Client HuBei [INFO] FFT-Persistent [INFO] FFT Job [INFO] [INFO] ------------------------------------------------------------------------
隨著專案的持續接入,專案結構如下:
fft-api # 公用的API,所有的程式都必須使用 fft-client-hubei # 湖北客戶端 fft-client-chongqing # 重慶客戶端 fft-client-dezhou # 德州客戶端 fft-client-jiangxi # 江西客戶端 fft-client-jining # 濟寧客戶端 fft-client-lingxian # 陵縣客戶端 fft-client-neimenggu # 內蒙古客戶端 fft-client-shandong # 山東客戶端 fft-client-shiyan # 湖北十堰客戶端 fft-job # 定時任務 fft-persistent # 資料庫連線層 fft-persistent-api # 資料庫連線層API fft-server # 公用服務端。所有的客戶端都連線服務端,服務端去連線資料庫連線層。 pom.xml # 父級pom檔案,定義通用的配置 # 反應堆輸出日誌如下: [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] FFT PARENT [INFO] FFT Api [INFO] FFT-Persistent-Api [INFO] FFT Server [INFO] FFT Client ChongQing [INFO] FFT Client JiangXi [INFO] FFT Client JiNing [INFO] FFT Client HuBei [INFO] FFT Client NeiMengGu [INFO] FFT Client ShanDong [INFO] FFT Client DeZhou [INFO] FFT Client LingXian [INFO] FFT-Persistent [INFO] FFT Client ShiYan [INFO] FFT Job [INFO] [INFO] ------------------------------------------------------------------------
在後來的使用過程中發現,原來的命令已經不能滿足我們的需要了。原因如下:
- 全部編譯、打包、上傳私服庫、部署到tomcat非常耗時。
- 其中任何一個出錯都會自動停止,需要等待開發修正。
所以想起了學習Maven時看見的裁剪反應堆。經過一段時間的折騰,使用命令如下:
$ clean deploy -B -e -U -Dmaven.test.skip=true -pl fft-api,fft-client-shiyan # 其他客戶端相同,這兒就用十堰客戶端代表。 # 反應堆輸出日誌如下: [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] # 反應堆中並沒有Froad FFT這個父級pom.xml [INFO] FFT Api [INFO] FFT Client ShiYan [INFO] [INFO] ------------------------------------------------------------------------
使用此命令後,速度提升非常大。原本要5分多鐘的構建,現在直接縮短到1分鐘內。
但是某天整體升級版本號到2.0.0後,依賴fft-api的管理平臺程式始終無法構建。查詢報錯資訊後發現是私服庫沒有2.0.0的父級pom.xml。
仔細查詢Jenkins日誌發現,父級pom.xml沒有上傳。因為我裁剪的反應堆只有fft-api,fft-client-shiyan倆個子模組,所以父級pom.xml是不會上傳的。
最後使用命令如下:
$ clean deploy -B -e -U -Dmaven.test.skip=true -pl -am # -am 將自動構建fft-client-shiyan模組所依賴的其他模組 # 反應堆輸出日誌如下: [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] FFT PARENT [INFO] FFT Api [INFO] FFT Client ShiYan [INFO] [INFO] ------------------------------------------------------------------------
最後,這個問題完美解決了。
參考:
http://www.cnblogs.com/zz0412/p/3767146.html
http://books.sonatype.com/mvnref-book/reference/_using_advanced_reactor_options.html