在使用maven過程中,我們在開發(fā)階段經(jīng)常性的會(huì)有很多公共庫處于不穩(wěn)定狀態(tài),隨時(shí)需要修改并發(fā)布,可能一天就要發(fā)布一次,遇到bug時(shí),甚至一天要 發(fā)布N次。我們知道,maven的依賴管理是基于版本管理的,對于發(fā)布狀態(tài)的artifact,如果版本號相同,即使我們內(nèi)部的鏡像服務(wù)器上的組件比本地 新,maven也不會(huì)主動(dòng)下載的。如果我們在開發(fā)階段都是基于正式發(fā)布版本來做依賴管理,那么遇到這個(gè)問題,就需要升級組件的版本號,可這樣就明顯不符合 要求和實(shí)際情況了。但是,如果是基于快照版本,那么問題就自熱而然的解決了,而maven已經(jīng)為我們準(zhǔn)備好了這一切。
maven中的倉庫分為兩種,snapshot快照倉庫和release發(fā)布倉庫。snapshot快照倉庫用于保存開發(fā)過程中的不穩(wěn)定版 本,release正式倉庫則是用來保存穩(wěn)定的發(fā)行版本。定義一個(gè)組件/模塊為快照版本,只需要在pom文件中在該模塊的版本號后加上-SNAPSHOT即可(注意這里必須是大寫),如下:
<groupId>cc.mzone</groupId>
<artifactId>m1</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>jar</packaging>
maven2會(huì)根據(jù)模塊的版本號(pom文件中的version)中是否帶有-SNAPSHOT來判斷是快照版本還是正式版本。如果是快照版本,那么在 mvn deploy時(shí)會(huì)自動(dòng)發(fā)布到快照版本庫中,而使用快照版本的模塊,在不更改版本號的情況下,直接編譯打包時(shí),maven會(huì)自動(dòng)從鏡像服務(wù)器上下載最新的快 照版本。如果是正式發(fā)布版本,那么在mvn deploy時(shí)會(huì)自動(dòng)發(fā)布到正式版本庫中,而使用正式版本的模塊,在不更改版本號的情況下,編譯打包時(shí)如果本地已經(jīng)存在該版本的模塊則不會(huì)主動(dòng)去鏡像服務(wù) 器上下載。
所以,我們在開發(fā)階段,可以將公用庫的版本設(shè)置為快照版本,而被依賴組件則引用快照版本進(jìn)行開發(fā),在公用庫的快照版本更新后,我們也不需要修改pom文 件提示版本號來下載新的版本,直接mvn執(zhí)行相關(guān)編譯、打包命令即可重新下載最新的快照庫了,從而也方便了我們進(jìn)行開發(fā)。