在 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..

« »