在 Maven 中着色依赖项

kev*_*314 6 maven maven-shade-plugin

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

依赖树

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

跳过导致这一点的糟糕设计决策,因为我不控制这些库中的任何一个,我希望重新打包顶级依赖项之一并遮蔽其所有依赖项,以便它基本上可以使用自己的独立版本的 Z。这可以用 Maven 完成吗?

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

ilo*_*ner 7

正如每个人都建议您可以使用maven-shade-plugin。开源项目通过为每个需要着色的依赖项创建一个 maven 子项目来处理这个问题。因此,在您的情况下,您需要 3 个 Maven 项目:

  1. 一个用于着色依赖 Y
  2. 一个用于着色依赖 G
  3. 一个用于您的原始项目。您的原始项目包括在 1. 和 2. 中创建的工件作为依赖项。

您的 Maven 项目层次结构如下所示:

  • 项目
    • pom.xml
    • 阴影-Y
      • pom.xml
    • 阴影-G
      • pom.xml
    • 应用
      • pom.xml

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