在Maven中着色依赖项

时间:2018-02-14 08:23:04

标签: maven maven-shade-plugin

我有两个通过Maven导入的依赖项,它们都导入了一个公共库,但是版本不同,但版本彼此不兼容。基本上是in this post所描述的问题:

dependency tree

但不幸的是,对于我来说,解决方案并不像博客文章所描述的那么简单,因为没有适用于这两种依赖关系的包Z的通用版本。

由于我无法控制这些库中的任何一个,因此我不想删除导致这一点的糟糕设计决策,我希望重新打包其中一个顶级依赖项,并将其所有依赖关系隐藏起来,以便它可以基本上使用自己的Z隔离版本。这可以用Maven完成吗?

我考虑过的一个解决方案是隔离依赖于包Y的所有类,并将它们放在一个单独的应用程序中,然后将其作为jar X PsCustomObject导入,但是我和#39;我想知道是否有更简单的方法来实现这一目标。

1 个答案:

答案 0 :(得分:3)

众所周知,您可以使用 maven-shade-plugin 。开源项目通过为需要着色的每个依赖项创建一个maven子项目来处理此问题。所以在你的情况下你需要3个maven项目:

  1. 一个用于着色依赖Y
  2. 一个用于着色依赖G
  3. 一个用于原始项目。您的原始项目包括在1.和2.中创建的工件作为依赖项。
  4. 您的maven项目层次结构如下所示:

    • 项目
      • 的pom.xml
      • 遮阳-Y
        • 的pom.xml
      • 遮阳-G
        • 的pom.xml
      • 应用
        • 的pom.xml

    具有用于着色依赖项的maven子项目的项目示例是here。查看 shaded-ning19 文件夹,了解如何创建用于着色依赖项的专用maven项目。