在Maven中,依賴項一般是這樣設置的: html
<dependency> <groupId>wonderful-inc</groupId> <artifactId>dream-library</artifactId> <version>1.2.3</version> </dependency>
如今,若是您正在使用發佈頻繁的庫,則不斷更新<version>標記可能會有些煩人。 有什麼方法能夠告訴Maven始終使用最新版本(來自存儲庫)? apache
注意: oracle
此答案僅適用於Maven 2! 在6年前, 「出於可複製的構建」 , 已在Maven 3中刪除了提到的LATEST
和RELEASE
轉換。 請參考此兼容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目標。
如今我知道這個主題很舊,可是閱讀問題和OP提供的答案後,看來Maven版本插件實際上多是他的問題的更好答案:
特別是可使用如下目標:
還提供瞭如下其餘目標:
只是覺得我會把它包括在內,以備未來參考。
在提出這個問題時,maven中存在一些版本範圍方面的問題,但這些問題已在較新版本的maven中獲得解決。 本文很好地捕獲了版本範圍的工做原理和最佳實踐,以更好地理解maven如何理解版本: https : //docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN8855
您是否可能依賴於開發版本,這些版本在開發期間顯然會發生很大變化?
除了增長開發版本的版本外,您還可使用在必要時覆蓋的快照版本,這意味着您沒必要在每次更改時都更改版本標籤。 像1.0-快照...
可是也許您正在嘗試實現其餘目標;)
請查看此頁面 (「依賴版本範圍」部分)。 您可能想作的是
<version>[1.2.3,)</version>
這些版本範圍在Maven2中實現。