簡體   English   中英

兩個不同的jar x,y依賴於z的不同版本。 用戶如何在應用程序中同時擁有x,y?

[英]Two different jars x,y having dependency on different versions of z. How user can have both x,y in his application?

我正在制作其余的客戶端jar來調用每組服務。 對於服務-1,服務-2,服務-3; 我們分別有clientjar1,clientjar2,clientjar3。 在所有其余的客戶端jar中,有一些通用功能已保存在單獨的jar中,即“ corejar1.0”。 所有客戶端jar都依賴於“ corejar1.0”。

現在,我必須為一組新的服務4創建一個新的客戶端jar“ clientjar4”。 但這不適用於舊的“ corejar1.0”。 因此,我修改了corejar的內容並發布了新版本“ corejar1.1”。 因此,“ clientjar4”指的是“ corejar1.1”,而所有其他客戶端指的是“ corejar1.0”。 現在,如果用戶想同時使用cientjar1和clientjar4,則會出現版本沖突,因為它們都引用了不同的核心jar版本。 因此,一個客戶端jar可能無法按預期工作。

因此,一種解決方案是通過更新客戶端jar使其指向新的“ corejar1.1”來重新釋放所有客戶端jar。 我覺得這不是一個好方法,因為盡管它們各自的服務沒有變化,但是我們正在發布新版本的客戶端jar。

我的項目是一個Java項目,我正在使用Gradle作為構建工具。 有人可以提出更好的解決方案嗎?

如@Andreas所述,管理corejar1.0corejar1.1之間的向后兼容性是您的責任。

為了管理依賴圖,您依賴於構建工具。 在此示例中,Gradle將意識到corejar 1.01.1之間存在版本沖突,並且Gradle的默認沖突解決機制是選擇最高版本。

盡管在您的情況下,這看起來是個不錯的解決方案,但在其他情況下,事情並非如此簡單。 為此,您可以調整Gradle解決可傳遞依賴項及其版本的方式。

如果你確保你所做的更改corejar1.1向后兼容 corejar1.0 ,然后有clientjar1使用corejar1.1是不是一個問題。

它是由來確保共享庫留在庫中的老“用戶”兼容,如果要防止相關性沖突。

如果不能使corejar1.1向后兼容corejar1.0 ,那么必須部署所有客戶端jar的更新版本。

暫無
暫無

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

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