工作隨筆——一次簡單的Maven加速構建實戰


注意:所有的編譯、打包、部署全部是通過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] ------------------------------------------------------------------------

 

在后來的使用過程中發現,原來的命令已經不能滿足我們的需要了。原因如下:

  1. 全部編譯、打包、上傳私服庫、部署到tomcat非常耗時。
  2. 其中任何一個出錯都會自動停止,需要等待開發修正。

所以想起了學習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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM