1. 程式人生 > >Maven快照機制(SNAPSHOT)

Maven快照機制(SNAPSHOT)

snap 更改 mvn clean 正在 log package tutorials 日常 git

以下引用自https://ayayui.gitbooks.io/tutorialspoint-maven/content/book/maven_snapshots.html:

一、場景

一個大型的軟件應用通常包含多個模塊,並且通常的場景是多個團隊開發同一應用的不同模塊。舉個例子,設想一個團隊開發應用的前端,項目為app-ui(app-ui.jar:1.0),而另一個團隊開發應用的後臺,使用的項目是data-service(data-service.jar:1.0)

現在可能出現的情況是開發data-service的團隊正在進行快節奏的bug修復或者項目改進,並且他們幾乎每隔一天就要發布庫到遠程倉庫。

現在如果data-service

團隊每隔一天上傳一個新版本,那麽將會出現下面的問題:

  • data-service團隊每次發布更新的代碼時都要告知app-ui團隊。
  • app-ui團隊需要經常地更新他們pom.xml文件到最新版本。

為了解決這種情況, 快照(SNAPSHOT)的概念派上了用場。

二、什麽是快照(SNAPSHOT)

快照(SNAPSHOT)是一種特殊的版本,指定了某個當前的開發進度的副本。不同於常規的版本,Maven每次構建都會在遠程倉庫中檢查新的快照

現在data-service團隊會每次發布更新代碼的快照到倉庫中,比如說data-service:1.0-SNAPSHOT來替代舊的快照jar包。

註意:每次更新jar包時,版本好不變,且後綴必須帶上-SNAPSHOT。

三、項目快照(Snapshot) VS 版本(Version)

版本(Version)的情況下,如果Maven以前下載過指定的版本文件,比如說data-service:1.0Maven將不會再從倉庫下載新的可用的1.0文件。若要下載更新的代碼,data-service的版本需要升到1.1

快照(Snapshot)的情況下,每次app-ui團隊構建他們的項目時,Maven將自動獲取最新的快照(data-service:1.0-SNAPSHOT)。

備註:版本(Version)存放在Release發布倉庫。快照(Snapshot)

存放在Snapshot快照倉庫。

註意:版本(Version)的概念,只要不帶有-SNAPSHOT的關鍵字時,都會認為這是一個在Release發布倉庫的jar包。其中在Release發布倉庫的jar包命名除了具體的版本號之後還可以帶上比如:1.0-Release、1.0-rc1等等的字樣。

四、原理詳解

Maven中的倉庫分為兩種,Snapshot快照倉庫Release發布倉庫Snapshot快照倉庫用於保存開發過程中的不穩定版本,Release正式倉庫則是用來保存穩定的發行版本。定義一個組件/模塊為快照版本,只需要在pom.xml文件中在該模塊的版本號後加上-SNAPSHOT即可(註意這裏必須是大寫),如下所示:

<groupId>com.jsoft.test</groupId>
<artifactId>testcommon</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>jar</packaging>

Maven會根據模塊的版本號(pom.xml文件中的version)中是否帶有-SNAPSHOT來判斷是快照版本還是正式版本。如果是快照版本,那麽在mvn deploy時會自動發布到快照版本庫中,而使用快照版本的模塊,在不更改版本號的情況下,直接編譯打包時,Maven自動從鏡像服務器上下載最新的快照版本。如果是正式發布版本,那麽在mvn deploy時會自動發布到正式版本庫中,而使用正式版本的模塊,在不更改版本號的情況下,編譯打包時如果本地已經存在該版本的模塊則不會主動去鏡像服務器上下載

所以,我們在開發階段,可以將公用庫的版本設置為快照版本,而被依賴組件則引用快照版本進行開發,在公用庫的快照版本更新後,我們也不需要修改pom.xml文件提示版本號來下載新的版本,直接Maven執行相關編譯、打包命令即可重新下載最新的快照庫了,從而也方便了我們進行開發。

雖然,快照的情況下,Maven在日常工作中會自動獲取最新的快照,你也可以在任何Maven命令中使用-U參數強制Maven下載最新的快照構建。命令如下:

mvn clean package -U

參考文章:

http://www.mzone.cc/article/277.html

https://maven.apache.org/settings.html#Repositories

Maven快照機制(SNAPSHOT)