在 Maven 中隐藏依赖项

Shading a dependency in Maven

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

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

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

我考虑过的一个解决方案是隔离所有依赖包 Y 的 类 并将它们放在单独的应用程序中并将其作为阴影 jar 发送,其中 [=14] =] 导入,但是我想知道是否有更简单的方法来完成它。

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

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

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

  • 项目
    • pom.xml
    • shade-Y
      • pom.xml
    • shade-G
      • pom.xml
    • 申请
      • pom.xml

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