如下引用自https://ayayui.gitbooks.io/tutorialspoint-maven/content/book/maven_snapshots.html:html
1、場景前端
一個大型的軟件應用一般包含多個模塊,而且一般的場景是多個團隊開發同一應用的不一樣模塊。舉個例子,設想一個團隊開發應用的前端,項目爲app-ui(app-ui.jar:1.0),而另外一個團隊開發應用的後臺,使用的項目是data-service(data-service.jar:1.0)。git
如今可能出現的狀況是開發data-service的團隊正在進行快節奏的bug修復或者項目改進,而且他們幾乎每隔一天就要發佈庫到遠程倉庫。apache
如今若是data-service團隊每隔一天上傳一個新版本,那麼將會出現下面的問題:服務器
爲了解決這種狀況, 快照(SNAPSHOT)的概念派上了用場。app
2、什麼是快照(SNAPSHOT)?maven
快照(SNAPSHOT)是一種特殊的版本,指定了某個當前的開發進度的副本。不一樣於常規的版本,Maven每次構建都會在遠程倉庫中檢查新的快照。ui
如今data-service團隊會每次發佈更新代碼的快照到倉庫中,好比說data-service:1.0-SNAPSHOT來替代舊的快照jar包。spa
注意:每次更新jar包時,版本好不變,且後綴必須帶上-SNAPSHOT。code
3、項目快照(Snapshot) VS 版本(Version)
版本(Version)的狀況下,若是Maven之前下載過指定的版本文件,好比說data-service:1.0,Maven將不會再從倉庫下載新的可用的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等等的字樣。
4、原理詳解
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
參考文章: