我對Maven快照的含義以及爲什麼我們要構建一個有點困惑?Maven快照究竟是什麼,爲什麼我們需要它?
回答
Maven中的快照版本是尚未發佈的版本。
想法是之前 a 1.0
版本(或任何其他版本)完成後,存在1.0-SNAPSHOT
。該版本是可能會變成1.0
。它基本上是「1.0
正在開發中」。這可能是關閉到真正的1.0
版本,或者很遠(例如在0.9
版本之後)。
「真實」版本和快照版本之間的區別在於快照可能會更新。這意味着,今天下載1.0-SNAPSHOT
可能會提供與昨天或明天下載文件不同的文件。
通常,在開發過程中存在快照依賴性只有,並且沒有發佈版本(即沒有非快照)應該對快照版本有依賴性。
「發佈」是不改變版本的最終版本。
「快照」是一個可以被具有相同名稱的另一個版本替換的版本。這意味着構建可能隨時發生變化,並且仍在積極發展中。
根據相同的代碼,您對不同的構建有不同的工件。例如。你可能有一個調試,一個沒有。一個用於Java 5.0,另一個用於Java 6.通常,更簡單的方法是擁有一個可以完成所需任務的構建版本。 ;)
「SNAPSHOT」術語表示構建是給定時間的代碼快照。
通常意味着該版本仍處於重大開發階段。
當需要發佈代碼時,您需要更改pom中列出的版本。因此,不要使用「SNAPSHOT」,而要使用「1.0」。請參考Semantic Versioning specification。
來講**語義版本**,-SNAPSHOT版本將作爲預發佈版本:「_A預發佈版本表示版本on是不穩定的,可能無法滿足其相關正常版本所表示的預期兼容性要求。示例:1.0.0-alpha,1.0.0-alpha.1,1.0.0-0.3.7,1.0.0-x.7.z.92._「 – avandeursen 2014-03-23 21:15:03
這聽起來對我來說就像」SNAPSHOT「不是一個「在特定時間你的代碼的快照」,而是「可用代碼的最新版本」。如果這是HTTP,這將是一個標誌,它說:「不要打擾做一個HEAD,去獲取任何東西服務器無論如何「。事實上,它幾乎是相反的」代碼在給定的時間「。 – lilbyrdie 2015-05-21 14:52:45
其他三個答案爲您提供了什麼是-SNAPSHOT
版本的良好願景。我只是想在Maven找到SNAPSHOT
依賴關係時添加一些關於Maven行爲的信息。
當您構建應用程序時,Maven將搜索本地存儲庫中的依賴關係。如果沒有找到穩定版本,它將搜索遠程存儲庫(在settings.xml
或pom.xml
中定義)來檢索此依賴關係。然後,它會將其複製到本地存儲庫中,以供下一個版本使用。
例如,foo-1.0.jar
庫被認爲是穩定版本,並且如果Maven在本地存儲庫中找到它,它將使用這一個用於當前版本。
現在,如果您需要一個foo-1.0-SNAPSHOT.jar
庫,Maven將知道此版本不穩定,並且可能會有所更改。這就是爲什麼Maven會嘗試在遠程存儲庫中查找更新版本的原因,即使在本地存儲庫上找到該庫的一個版本。但是,這種檢查每天只進行一次。這意味着如果在本地存儲庫中有foo-1.0-20110506.110000-1.jar
(即該庫已在2011年5月6日11:00:00生成),並且如果您在同一天再次運行Maven構建,Maven將而不是檢查存儲庫是否有更新的版本。
Maven提供你一個方法,可以在你的倉庫定義更改此更新策略:
<repository>
<id>foo-repository</id>
<url>...</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>XXX</updatePolicy>
</snapshots>
</repository>
其中XXX
可以是:
- 總是:Maven會檢查是否有新版本上每一個構建;
- 每天,默認值;
- 間隔:XXX:在分鐘的間隔(XXX)
- 從未:Maven將永遠不會嘗試檢索另一個版本。只有在本地不存在的情況下才會這樣做。通過配置,
SNAPSHOT
版本將作爲穩定庫進行處理。
(settings.xml中的模型,可以發現here)
看來有可能使用命令行開關來強制maven重新下載所有的'SNAPSHOT'版本:'mvn clean package -U'[maven tutorial](http://www.tutorialspoint.com/maven/maven_snapshots。 htm) – 2014-03-25 14:38:52
小心使用'-U'標誌。由於[MNG-4142](http://jira.codehaus.org/browse/MNG-4142),它可能無法達到你期望的效果。 – 2014-05-05 18:16:06
另外值得一提的是,好的做法要求您在創建發佈版本時不使用快照依賴關係,並且實際上如果存在快照依賴關係,則Maven發佈插件將失敗。 – RCross 2014-07-07 08:29:35
這是一個快照看起來像一個倉庫,並在這種情況下,不啓用,這意味着在這裏所指的倉庫是穩定的,有沒有必要更新
<project>
...
<repositories>
<repository>
<id>lds-main</id>
<name>LDS Main Repo</name>
<url>http://code.lds.org/nexus/content/groups/main-repo</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
另一種情況將是:
<snapshots>
<enabled>true</enabled>
</snapshots>
WH這意味着Maven會查找此存儲庫的更新。您也可以爲帶有標籤的更新指定間隔。
通常行家,我們有兩種類型的構建 1)快照建立 2)發佈版本
1)快照建立:快照是特殊版本,表明當前的部署副本並不像普通版本,Maven的檢查每個版本的版本都在遠程存儲庫 中,因此快照構建只是維護構建。
2)發佈構建:發佈意味着在構建版本中刪除SNAPSHOT,這些是常規構建版本。
Maven版本可以包含字符串文字「SNAPSHOT」來表示項目當前處於活動開發狀態。例如,如果您的項目具有「1.0-SNAPSHOT」版本,並且您將此項目的工件部署到Maven存儲庫,那麼如果您要將此版本擴展到「1.0-20080207-230803-1」 在2008年2月7日11:08 PM部署發佈。換句話說,當你部署一個快照時,你不會發佈一個軟件組件;您在 在特定時間發佈組件的快照。
所以主要是快照版本用於積極開發項目。 如果您的項目依賴於處於活動開發中的軟件組件,您可以依賴快照版本,Maven將定期嘗試 在運行構建版本時從存儲庫下載最新的快照。同樣,如果 系統的下一個版本將具有版本「1.8」,則在項目正式發佈之前,您的項目 將具有「1.8-SNAPSHOT」版本。
例如,下面的依賴會隨時下載春天的最新1.8開發JAR:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>1.8-SNAPSHOT」</version>
</dependency>
行家釋放過程的一個例子
- 1. Android中的上下文究竟是什麼?爲什麼它需要?
- 2. 什麼是仿函數,爲什麼我們需要它們?
- 3. 什麼是EJB回調,爲什麼我們需要它們?
- 4. 究竟是什麼ObjectFactory是什麼,它用於什麼?
- 5. Maven依賴關係究竟是什麼?
- 6. labwindows:ServerTCPRead究竟需要什麼參數?
- 7. 究竟需要測試什麼?
- 8. 核心文件究竟是什麼,它爲什麼有用?
- 9. 什麼是R中的因子,爲什麼我們需要它
- 10. Windows上的Spark - 什麼是winutils,爲什麼我們需要它?
- 11. ELF文件 - 什麼是部分,爲什麼我們需要它?
- 12. 什麼是mcrypt,爲什麼和我們需要它在哪裏?
- 13. 什麼是伴侶對象,爲什麼我們需要它?
- 14. PHP中的閉包...究竟是什麼,他們什麼時候需要使用它們?
- 15. 究竟是什麼耙db:migrate做什麼?
- 16. 裝配需要什麼?爲什麼我們使用它們?
- 17. 「句柄」究竟是什麼?
- 18. getGlobalVisibleRect()究竟是什麼?
- 19. Werkzeug究竟是什麼?
- 20. 究竟是什麼@ ViewDebug.ExportedProperty?
- 21. .parentNode究竟是什麼?
- 22. Heroku究竟是什麼?
- 23. session_hash究竟是什麼?
- 24. 究竟是什麼awakeFromNib?
- 25. 究竟是什麼任務
- 26. cout/cin究竟是什麼?
- 27. SKEmitterNode particleLifetime究竟是什麼?
- 28. 代表究竟是什麼?
- 29. 究竟是什麼情景
- 30. 究竟是什麼php.ini memory_limit?
所以快照總是一個更穩定的版本,我假設。該版本號僅適用於使用哪個版本的工件,而不是一個不同的分支源代碼是否正確? – amphibient 2013-10-08 21:54:06
@amphibient:不,快照不一定更穩定:它只是最新的版本。快照_presented_實際版本,它並不在它之後。事實上,版本號碼通常不會請參閱分支機構 – avandeursen 2014-03-23 21:05:13
@avandeursen快照不一定具有您聲明的語義,您可以擁有「主-SNAPSHOT「,後來發佈了1.0版本。它不一定是「FutureVersion-SNAPSHOT」,也不一定在發佈之前。其他一切都是正確的 - 它是一個不穩定的參考移動目標,不能依靠產生可重複的構建。 – 2015-05-07 23:18:47