我有两个通过Maven导入的依赖项,它们都导入了一个公共库,但是版本不同,但版本彼此不兼容。基本上是in this post所描述的问题:
但不幸的是,对于我来说,解决方案并不像博客文章所描述的那么简单,因为没有适用于这两种依赖关系的包Z
的通用版本。
由于我无法控制这些库中的任何一个,因此我不想删除导致这一点的糟糕设计决策,我希望重新打包其中一个顶级依赖项,并将其所有依赖关系隐藏起来,以便它可以基本上使用自己的Z
隔离版本。这可以用Maven完成吗?
我考虑过的一个解决方案是隔离依赖于包Y
的所有类,并将它们放在一个单独的应用程序中,然后将其作为jar
X
PsCustomObject
导入,但是我和#39;我想知道是否有更简单的方法来实现这一目标。
答案 0 :(得分:3)
众所周知,您可以使用 maven-shade-plugin 。开源项目通过为需要着色的每个依赖项创建一个maven子项目来处理此问题。所以在你的情况下你需要3个maven项目:
您的maven项目层次结构如下所示:
具有用于着色依赖项的maven子项目的项目示例是here。查看 shaded-ning19 文件夹,了解如何创建用于着色依赖项的专用maven项目。