Maven 是一個項目管理工具,每一個項目deploy到repository中之後,都有一個座標,座標中就包含一個版本,那個版本將是咱們進行版本控制管理的一個重點。安全
一個產品實際可能包含10幾個模塊,模塊間會有依賴關係,因此在項目管理中常常聽到這種抱怨:maven
「測試環境又發不了券了?」工具
「是誰又把個人jar包覆蓋了?」測試
「這個功能測試環境都測試好了,到了預生產怎麼又不行了?」版本控制
「jar包又被哪一個傻X覆蓋了?」blog
這些基本上都是由於實際研發過程當中版本管理混亂或者幾乎沒有版本管理形成的,有的是直接就一個版本用到底,全部環境都用一個版本,常常是還沒上線的代碼deploy到repository中,致使線上其餘模塊發佈出現了問題。繼承
你們能夠想象一下,一個項目中可能有10幾個模塊,每一個模塊都有依賴的模塊,不管是哪套環境,任何一次deploy均可能影響到其餘的環境,這是多麼恐怖的事情。因此,「穩定大於一切」,「應該給研發人員和測試人員應有的安全感!」接口
如何在maven中進行這個版本的控制呢?如何解決這些問題呢?項目管理
1.版本統一進行定義管理開發
定義一個統一的父pom項目,該項目只進行版本的管理,其餘全部的模塊的版本都在父pom中配置管理,一個模塊依賴其餘模塊時統一繼承父pom中的版本。
定義好每一個迭代週期的版本後,統一修改父pom的版本,父pom中定義好各個環境的profile,不一樣的環境使用不一樣的profile。
每定義一個版本時,須要同時定義各個模塊的版本號,定義好之後,更新父pom的版本號,須要使用模塊新特性的就更新父pom的版本,這樣就保證版本可以統一進行管理。以下圖父pom項目中1.0.3版本的對應的user是1.0.2版本,order是1.0.1版本,pay是1.0.3版本。若是下一次要進行新功能開發,user修改版本爲1.1.0,其餘模塊接口不變,那麼父pom就須要進行版本升級爲1.1.0,pay依賴user模塊1.1.0版本就須要更新父pom的版本號。
父pom項目統一由管理員進行控制管理,每次版本修改都由管理進行發佈管理。
2.支持多套環境的版本切換
maven倉庫支持snapshot版本和release版本,研發環境和測試環境可使用snapshot版本進行發佈,研發環境和測試環境屬於高頻deploy執行的,因此保證不更新版本號每次deploy後maven打包時會更新依賴,正式環境使用relase版本,若是須要升級就更新版本號。
3.支持多版本同時存在
每一個項目能夠發佈多個版本,不一樣的版本能夠被不一樣的模塊依賴,可以各取所需,好比,user模塊有1.0.1-release版本和1.0.3-release版本,這兩個版本能夠被不一樣的模塊引用,只有須要1.0.3-release新特性的模塊纔對應更新父pom的版本。
以上就是我在項目管理中實際使用maven進行版本控制的經驗。