簡體   English   中英

具有相同依賴項的兩個版本-較低版本被忽略

[英]Two version of same dependency - lower version getting ignored

我有一個項目,其中兩個依賴項使用同一庫的不同版本。 例如,我的項目具有依賴項A和依賴項B AB都使用公共庫/依賴項X ,但版本不同。 A具有X v1版本,而B具有X v2版本。 所以現在當我在項目中添加AB作為依賴項時,項目go.sum有兩個X版本。

我期望在運行時由AB引用各個版本。 但事實並非如此。 不知何故,當我在項目上運行測試時, A正在使用X v2 ,理想情況下,它應該使用v1 (因為A go.mod中已明確指定/添加了v1 )。 由於X v1v2存在很多差異,因此它會中斷執行。

因此,在我的項目中,如何明確指定使用AXv1B v2 go模塊中是否有此類規定?

您的B軟件包必須導入帶有/v2后綴的X

轉到Wiki:模塊:語義導入版本控制:

當v1或更高版本的軟件包進行向后不兼容的更改時,召回semver需要對主要版本進行更改。 遵循導入兼容性規則和semver的結果稱為語義導入版本控制Semantic Import Versioning) ,其中主要版本包含在導入路徑中-這可確保在主要版本由於兼容性中斷而增加時,導入路徑會隨時更改。

語義導入版本控制的結果是,加入Go模塊的代碼必須遵守以下規則:

  • 如果模塊是版本V2或更高,該模塊的主版本必須被包括作為/vN在模塊路徑的在go.mod文件(例如,所使用的端module github.com/my/mod/v2require github.com/my/mod/v2 v2.0.0 )並在包導入路徑中(例如, import "github.com/my/mod/v2/mypkg" )。

導入路徑中的此版本后綴將使它們成為2個“不同”的軟件包。 如果AB使用X的相同主版本,則將沒有2個主版本,則將選擇較高的版本(“最小版本選擇”算法)。 有關詳細信息,請參見版本選擇

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM