在 Maven 中,Release 和 Snapshot 是兩種不同的版本類型
Release 版本
- 穩定性:Release 版本被認為是穩定的、可靠的版本。
- 不可變性:一旦發布,Release 版本的內容不應該被更改。
- 版本號:通常使用固定的版本號,如 1.0.0、2.1.3 等。
- 用途:適合用於生產環境或正式發布。
Snapshot 版本
- 開發中:Snapshot 版本代表開發中的版本,可能不穩定。
- 可變性:Snapshot 版本的內容可能會隨時變化。
- 版本號:通常在版本號後加上 -SNAPSHOT,如 1.0.0-SNAPSHOT,且必需是大寫,加在版本別後面,用 ”-”分隔。
- 用途:主要用於開發和測試階段。
更新機制
- Release:Maven 在本地是進行快取的,如果使用的是 release 版本的話,一旦套件被下載到本地端,Maven就不會再重新下載的。如果需要重新下載的話,就必需要手動刪除本地中的快取。
- Snapshot:SNAPSHOT 版本的話,每次在建置的時候都會從定義的新倉庫下載新的版本,
更進一步講Snapshot:
假設有兩個元件:order-service 和 customer-ui,其中 customer-ui 專案依賴 order-service。
這兩個專案每天都會建置多次,如果每次建置都要升級 order-service 的版本,你可能會感到困擾。這時候 SNAPSHOT 版本就派上用場了。
在日常建置時,你可以建立 order-service 的快照版本,例如 order-service-1.0-SNAPSHOT.jar,而 customer-ui 則依賴這個快照版本。
每次 customer-ui 建置時,它會優先檢查遠端倉庫是否有最新的 order-service-1.0-SNAPSHOT.jar。如果有,就會下載並使用。
即使本地倉庫中已有 order-service-1.0-SNAPSHOT.jar,它仍會檢查遠端倉庫中同名的 jar 檔是否為最新版本。
在Maven的repository配置中,<updatePolicy>標籤用於指定如何更新SNAPSHOT依賴。以下是常見的選項:
- always:每次建構時都檢查更新
- daily:每天檢查一次更新(預設值)
- interval:X:每X分鐘檢查一次更新
- never:從不檢查更新
所以,您可以根據需求將XXX替換為上述選項之一。例如,如果您希望每次建構時都檢查更新,可以這樣設置:
<repository>
<id>myRepository</id>
<url>...</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
這個設置與您提供的上下文中關於SNAPSHOT版本的描述相符,即每次建置時都會檢查是否有最新版本。
選擇使用 Release 還是 Snapshot 版本取決於項目的階段和需求。在開發過程中使用 Snapshot 版本可以方便地獲取最新的變更,而在正式環境中則應該使用穩定的 Release 版本。
On this day..
- 幸福的感覺 ~ 1 - 2006
« [末!四代森林人] 升級鋁圈 RAYS VOLKRACING TRINITI V [網站可靠性工程] SRE 核心實務:持續進步的系統及組織文化 »