本文介紹了Maven-從x管理的版本,是否因重復而被省略?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我很難理解Maven依賴關系樹中當它聲明從x管理的版本時會發生什么;如果是重復的,則省略。
例如,假設我在server-a
的依賴項管理部分中定義了enterprise-data-2.4
。
我在server-a
的依賴關系樹中獲取了一個依賴項server-b
的以下內容。enterprise-data-2.4
。
[INFO] +- hello.world.welcome.to:server-b:jar:3.1-SNAPSHOT:runtime
[INFO] | +- (hello.world.where.am: enterprise-data:jar:2.4:runtime - version managed from 3.0; omitted for duplicate)
假設server-b
是唯一拉入的JARenterprise-data-2.4
,我的理解是server-a
總是在這里拉入enterprise-data-2.4
。這樣做正確嗎?
但是,server-b
中代碼依賴于enterprise-data-3.0
,server-b
的編譯時依賴于enterprise-data-3.0
。
現在,我有一個測試項目,比如說test-b
,它測試server-a
項目中存在的server-b
JAR,并且對enterprise-data-3.0
具有測試依賴關系。這些測試直接命中server-a
上的代碼。
當我在test-b
中運行我的測試時,我在嘗試訪問enterprise-data-3.0
中存在的功能時應該收到錯誤,因為它不是由server-a
引入的,還是會因為對enterprise-data-3.0
存在測試依賴關系而通過?它當前已通過,但我不確定測試依賴項是否足夠。
請幫我理解一下。
編輯:我正在使用maven-3
。
謝謝。
推薦答案
例如,假設我在服務器a的依賴項管理部分中定義了Enterprise-data-2.4。
然后你總是得到2.4,即使只有取決于1.8的罐子也是如此。依賴項管理優先于依賴項中介。
假設服務器-b是唯一拉入企業數據-2.4的JAR,我的理解是服務器-a將始終在這里拉入企業數據-2.4。這樣做正確嗎?
假設您沒有依賴項管理,則是。如果存在依賴于不同版本的多個依賴項,則問題是首先加載哪個依賴項(及其傳遞依賴項),根據Maven Version>2.0.9的依賴項中介規則。其他選項為:”從x管理,重復則省略”。
當我在test-b中運行測試時,嘗試訪問Enterprise-Data-3.0中的功能時是否會出現錯誤,因為它不是由服務器-a引入的,還是會因為對Enterprise-Data-3.0存在測試依賴而通過?它當前已通過,但我不確定測試依賴項是否足夠。
如果它使用不兼容的代碼拉入錯誤的版本,是的,您將看到錯誤。對于Maven3,使用3.0定義測試范圍依賴項,使用2.4定義編譯范圍依賴項,這意味著Maven將覆蓋2.4,并使用在測試范圍中定義的較新的依賴項。有關詳細信息,請參閱this question and its answers。
不過,您始終可以在test-b中使用依賴項管理來修復要使用的每個依賴項的版本。
這篇關于Maven-從x管理的版本,是否因重復而被省略?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,