![](/img/trans.png)
[英]How can Maven Shade Plugin relocate multiple versions of a transitive dependency?
[英]Shade (relocate) one version of a transitive dependency, but not the other
我有一個包含兩個依賴項A和B的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-wrapper
和B
我在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.