簡體   English   中英

Shade(重定位)傳遞依賴的一個版本,而不是另一個版本

[英]Shade (relocate) one version of a transitive dependency, but not the other

我有一個包含兩個依賴項AB的Maven項目。 這些中的每一個都依賴於C ,但它們依賴於不同版本的C. 假設A取決於C版本1, B取決於C版本2。

不幸的是, A與版本2不是字節碼兼容,也不是版本1的B. (碰巧, A與版本2 源代碼兼容 ,但我認為這不會對我們有所幫助。)

這意味着我在項目中需要兩個版本的傳遞依賴項,我需要A使用版本1, B需要使用版本2。

有辦法做到這一點嗎?

我曾假設我需要使用shade插件來重新定位A的包名及其所有依賴項,但這似乎不可能。 如果我遮蔽A ,它的依賴關系不會被遮擋,它仍然會選擇版本2,並且無法運行。

創建另一個項目包裝器A名為A-wrapper A-wrapper重新定位C 然后在你的主項目中,依賴於A-wrapperB

我在pb2和pb3上遇到了類似的問題,並且使用這種方式解決了它。 https://stackoverflow.com/a/41394239/1395722

假設依賴關系A需要C的v1,而依賴關系B需要C的v2 您可以創建一個包含v的C的超級罐,但是使用shade插件更改包裝,示例jar A的內容為C,新包裝為“v1.c.something” 對B做同樣的事情,因此jar B的內容為C,新包裝為“v2.c.something” 您只需要包含沖突的依賴項,而不是全部。

暫無
暫無

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

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