如何告訴Maven使用最新版本的依賴項?

在Maven中,依賴項一般是這樣設置的: html

<dependency>
  <groupId>wonderful-inc</groupId>
  <artifactId>dream-library</artifactId>
  <version>1.2.3</version>
</dependency>

如今,若是您正在使用發佈頻繁的庫,則不斷更新<version>標記可能會有些煩人。 有什麼方法能夠告訴Maven始終使用最新版本(來自存儲庫)? apache


#1樓

注意: oracle

此答案僅適用於Maven 2! 在6年前, 「出於可複製的構建」已在Maven 3中刪除了提到的LATESTRELEASE轉換。 請參考此兼容Maven 3的解決方案maven


若是您始終想使用最新版本,則Maven有兩個關鍵字能夠用做版本範圍的替代。 您應該謹慎使用這些選項,由於您將再也不控制所使用的插件/依賴項。 ide

當您依賴插件或依賴項時,可使用LATEST或RELEASE的版本值。 LATEST是指特定工件的最新發行版本或快照版本,是特定存儲庫中最新部署的工件。 RELEASE是指存儲庫中的最後一個非快照版本。 一般,設計依賴工件非特定版本的軟件並非最佳實踐。 若是您正在開發軟件,則可能但願使用RELEASE或LATEST做爲便利,以便在發行新版本的第三方庫時沒必要更新版本號。 發佈軟件時,應始終確保項目依賴於特定版本,以減小構建或項目受不受您控制的軟件版本影響的機會。 謹慎使用LATEST和RELEASE。 工具

有關更多詳細信息,請參見Maven書籍POM語法部分 。 或者在Dependency Version Ranges上查看此文檔,其中: ui

  • 方括號( [] )表示「封閉」(含)。
  • 括號( () )表示「開放」(不包括在內)。

這是說明各類選項的示例。 在Maven存儲庫中,com.foo:my-foo具備如下元數據: spa

<?xml version="1.0" encoding="UTF-8"?><metadata>
  <groupId>com.foo</groupId>
  <artifactId>my-foo</artifactId>
  <version>2.0.0</version>
  <versioning>
    <release>1.1.1</release>
    <versions>
      <version>1.0</version>
      <version>1.0.1</version>
      <version>1.1</version>
      <version>1.1.1</version>
      <version>2.0.0</version>
    </versions>
    <lastUpdated>20090722140000</lastUpdated>
  </versioning>
</metadata>

若是須要依賴於該工件,則可使用如下選項(固然能夠指定其餘版本範圍 ,僅在此處顯示相關的範圍): 插件

聲明一個確切的版本(將始終解析爲1.0.1): 設計

<version>[1.0.1]</version>

聲明一個明確的版本(除非發生衝突,不然當Maven選擇一個匹配的版本時,它將始終解析爲1.0.1):

<version>1.0.1</version>

聲明全部1.x的版本範圍(當前將解析爲1.1.1):

<version>[1.0.0,2.0.0)</version>

聲明一個開放式版本範圍(將解析爲2.0.0):

<version>[1.0.0,)</version>

將版本聲明爲最新(將解析爲2.0.0)(從Maven 3.x中刪除)

<version>LATEST</version>

將版本聲明爲RELEASE(將解析爲1.1.1)(從Maven 3.x中刪除):

<version>RELEASE</version>

請注意,默認狀況下,您本身的部署將更新Maven元數據中的「最新」條目,可是要更新「發佈」條目,您須要從Maven超級POM激活「發佈配置文件」。 您可使用「 -Prelease-profile」或「 -DperformRelease = true」來執行此操做


值得強調的是,任何容許Maven選擇依賴項版本(最新,發佈和版本範圍)的方法均可以讓您開放以解決構建時間問題,由於更高版本的行爲可能不一樣(例如,依賴項插件先前已將默認設置切換爲默認值)。值從true到false,結果使人困惑)。

所以,一般最好在發行版中定義確切的版本。 正如Tim的答案所指出的那樣, maven-versions-plugin是用於更新依賴項版本的便捷工具,尤爲是版本:use-latest-versions版本:use-latest-release目標。


#2樓

如今我知道這個主題很舊,可是閱讀問題和OP提供的答案後,看來Maven版本插件實際上多是他的問題的更好答案:

特別是可使用如下目標:

  • 版本:use-latest-versions在pom中搜索全部已爲較新版本的版本,並將其替換爲最新版本。
  • 版本:use-latest-releases在pom中搜索全部非SNAPSHOT版本,這些版本都是較新的版本,並將其替換爲最新版本。
  • 版本:update-properties更新項目中定義的屬性,以便它們對應於特定依賴項的最新可用版本。 若是必須將一組依賴項所有鎖定到一個版本,這將頗有用。

還提供瞭如下其餘目標:

  • 版本:display-dependency-updates掃描項目的依賴關係,並生成這些依賴關係的報告,這些報告具備較新的版本。
  • 版本:display-plugin-updates掃描項目的插件,並生成這些插件具備較新版本的報告。
  • 版本:update-parent更新項目的父部分,以便它引用最新的可用版本。 例如,若是您使用公司根POM,則在須要確保使用最新版本的公司根POM時,此目標可能會有所幫助。
  • 版本:update-child-modules更新項目子模塊的父部分,所以版本與當前項目的版本匹配。 例如,若是您有一個聚合器pom也是它聚合的項目的父級,而且子級和父級版本不一樣步,則此mojo能夠幫助修復子級模塊的版本。 (請注意,若是您的項目被嚴重破壞以致於因爲版本不匹配而沒法構建,則可能須要使用-N選項調用Maven才能運行此目標)。
  • version:lock-snapshots在pom中搜索全部-SNAPSHOT版本,並將其替換爲該-SNAPSHOT的當前時間戳版本,例如-20090327.172306-4
  • 版本:unlock-snapshots在pom中搜索全部時間戳鎖定的快照版本,並將其替換爲-SNAPSHOT。
  • 版本:resolve-ranges使用版本範圍查找依賴項,並將範圍解析爲所使用的特定版本。
  • 版本:use-releases在pom中搜索全部已發佈的-SNAPSHOT版本,並將其替換爲相應的發佈版本。
  • 版本:use-next-releases在pom中搜索全部非SNAPSHOT版本,這些版本已是較新的發行版,並將其替換爲下一個發行版。
  • 版本:use-next-versions在pom中搜索全部已是較新版本的版本,並將其替換爲下一個版本。
  • 版本:commit刪除pom.xml.versionsBackup文件。 構成內置的「窮人SCM」的一半。
  • 版本:還原從pom.xml.versionsBackup文件中還原pom.xml文件。 構成內置的「窮人SCM」的一半。

只是覺得我會把它包括在內,以備未來參考。


#3樓

在提出這個問題時,maven中存在一些版本範圍方面的問題,但這些問題已在較新版本的maven中獲得解決。 本文很好地捕獲了版本範圍的工做原理和最佳實踐,以更好地理解maven如何理解版本: https : //docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN8855


#4樓

您是否可能依賴於開發版本,這些版本在開發期間顯然會發生很大變化?

除了增長開發版本的版本外,您還可使用在必要時覆蓋的快照版本,這意味着您沒必要在每次更改時都更改版本標籤。 像1.0-快照...

可是也許您正在嘗試實現其餘目標;)


#5樓

請查看此頁面 (「依賴版本範圍」部分)。 您可能想作的是

<version>[1.2.3,)</version>

這些版本範圍在Maven2中實現。

相關文章
相關標籤/搜索