maven deploy 快照與釋出 -- RELEASE與SNAPSHOT
maven package、install、deploy的聯絡與區別:
mvn clean package依次執行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7個階段。
mvn clean install依次執行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8個階段。
mvn clean deploy依次執行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9個階段。
由上面的分析可知主要區別如下,
package命令完成了專案編譯、單元測試、打包功能,但沒有把打好的可執行jar包(war包或其它形式的包)佈署到本地maven倉庫和遠端maven私服倉庫
install命令完成了專案編譯、單元測試、打包功能,同時把打好的可執行jar包(war包或其它形式的包)佈署到本地maven倉庫,但沒有佈署到遠端maven私服倉庫
deploy命令完成了專案編譯、單元測試、打包功能,同時把打好的可執行jar包(war包或其它形式的包)佈署到本地maven倉庫和遠端maven私服倉庫
RELEASE與SNAPSHOT:
maven中的倉庫分為兩種,snapshot快照倉庫和release釋出倉庫。snapshot快照倉庫用於儲存開發過程中的不穩定版本,release正式倉庫則是用來儲存穩定的發行版本。
定義一個元件/模組為快照版本,只需要在pom檔案中在該模組的版本號後加上-SNAPSHOT即可(注意這裡必須是大寫),如下:
<groupId>cc.mzone</groupId> <artifactId>m1</artifactId> <version>0.1-SNAPSHOT</version> <packaging>jar</packaging>
maven會根據模組的版本號(pom檔案中的version)中是否帶有-SNAPSHOT來判斷是快照版本還是正式版本。
如果是快照版本,那麼在mvn deploy時會自動釋出到快照版本庫中,而使用快照版本的模組,在不更改版本號的情況下,直接編譯打包時,maven會自動從映象伺服器上下載最新的快照版本。
SNAPSHOT是不穩定版,可能是還在開發中的版本,在開發時使用者A可能每天都會更新程式碼,可能會頻繁的釋出版本。而另一組使用者B需要實時得到A的最新程式碼版本,以進行同步開發。如果使用RELEASE倉庫需要不停的更換座標,才能升級到最新版本。而SNAPSHOT倉庫則不需要這樣做,使用者A和使用者B都不用升級版本。使用者A每次釋出時會根據當時時間建立一個新的快照版本,之前的快照版本也會保留成為歷史版本。使用者B每次構建專案時會自動根據版本時間載入最新的JAR包,這種模式更加適合於多模組同步開發測試階段
如果是正式釋出版本,那麼在mvn deploy時會自動釋出到正式版本庫中,而使用正式版本的模組,在不更改版本號的情況下,編譯打包時如果本地已經存在該版本的模組則不會主動去映象伺服器上下載。
所以,我們在開發階段,可以將公用庫的版本設定為快照版本,而被依賴元件則引用快照版本進行開發,在公用庫的快照版本更新後,我們也不需要修改pom檔案提示版本號來下載新的版本,直接mvn執行相關編譯、打包命令即可重新下載最新的快照庫了,從而也方便了我們進行開發。
使用者A將程式碼打包釋出到RELEASE倉庫,具體操作參考上篇文章。使用者B使用時,需要在pom.xml新增JAR包的依賴座標。如果使用者A將版本從1.0升級為2.0,使用者B使用時也需要同時在pom.xml中修改座標版本。但是RELEASE是穩定版本,是經過測試以後才會釋出的,通常不會頻繁的升級版本
RELEASE和SNAPSHOT倉庫用法
在pom.xml中設定快照和RELEASE倉庫如:
<distributionManagement>
<repository>
<id>releases</id>
<name>releases</name>
<url>http://10.101.15.59:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>snapshot</id>
<name>snapshot</name>
<url>http://10.101.15.59:8081/repository/maven-snapshots/</url>
<layout>legacy</layout>
</snapshotRepository>
</distributionManagement>
在setting.xml中設定使用者名稱密碼, 這裡配置的server的id必須和pom檔案中的distributionManagement對應倉庫的id保持一致,maven在處理髮布時會根據id查詢使用者名稱稱和密碼進行登入和檔案的上傳發布。
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshot</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
deploy到nexus私服,在idea中, 單擊maven中的deploy按鈕,執行。
在nexus介面中點選最上排的方塊圖示--browse--components選單--maven-snapshots倉庫。如下,我沒有改座標,連續釋出了幾次,可以發現name列和group列是完全一樣的,version列根據釋出時間不同自動在1.0後面加上了當前時間,以此區別不同版本