当前位置: 首页 > 知识库问答 >
问题:

遮蔽(重定位)传递依赖项的一个版本,但不遮蔽另一个版本

柯树
2023-03-14

我有一个Maven项目,它包含两个依赖项,a和B,每个依赖项都传递依赖于C,但它们依赖于C的不同版本。假设a依赖于C版本1,而B依赖于C版本2。

不幸的是,A与版本2不兼容字节码,B与版本1也不兼容字节码。(碰巧,A与版本2是源代码兼容的,但我不认为这对我们在这里有帮助。)

这意味着我的项目中需要传递依赖项的两个版本,并且我需要A来使用版本1,需要B来使用版本2。

有办法做到这一点吗?

我假设我需要使用shade插件来重新定位A的包名及其所有依赖项,但这似乎是不可能的。如果我给A加阴影,它的依赖项就不会加阴影,它仍然会选择版本2,并且无法运行。

共有1个答案

郎献
2023-03-14

创建另一个名为a-wrapper的项目包装器A。在a-wrapper中重定位C。然后在主项目中,依赖于a-wrapperb

我在pb2和pb3上遇到过类似的问题,用这种方法解决了。https://stackoverflow.com/A/41394239/1395722

 类似资料:
  • 问题内容: 给出以下代码: 您能解释一下阴影的概念吗?另外,main方法的代码中实际使用了什么? 我知道这是一个非常丑陋的代码,但是丑陋是SCJP图书作者的标准选择。 问题答案: 将阴影作为一个概念并没有什么神奇的。很简单,对名称的引用将始终引用最近的封闭范围内的实例。在您的示例中: } 我已经用数字以“ tooth#N”的形式注释了每个实例。基本上,任何在其他地方已经定义的名称的引入都会使该范围

  • 我写了一个库,它依赖于Guava版本20.0(与JDK 1.7兼容的最后一个版本) 然后,我编写了一个使用该库的应用程序,还uk.org.lidalia: slf4j-test: 1.2.0(带有测试范围)。slf4j-test依赖于Guava的14.0.1版本。 我的问题是,我的应用程序将两个不同版本的Guava视为可传递依赖项,并选择较旧的版本。现在,当我调用库中的某些方法时,我会得到类或方法

  • 我用我的真实情况来说明问题。 我使用logback 1.0.1进行日志记录,它包含SLF4J 1.6.4作为依赖项。我还为遗留日志API(Java . util . logging、log4j和commons-logging)使用SLF4J API桥,它们不是显式的依赖关系。这些也必须(最好)是版本1.6.4。 为了使我的pom.xml尽可能整洁和无错误,我想强制这些API桥接器与SLF4J版本相

  • 我有两个依赖项,工件-a和工件-b。每个依赖于不同版本的工件-c。我如何对工件进行阴影以使用这些不同的依赖项?(或者让工件-a使用阴影依赖项,工件-b使用普通依赖项。

  • 我正在尝试自动化访问点web配置。在此期间,我会弹出一个我想要点击的窗口(类似于“是”和“否”的叠加 我试图单击的覆盖层的HTML代码: 我试过了 但我得到以下错误: 引发exception_class(message,screen,stacktrace)selenium.common.exceptions.ElementClickInterceptedException:message:元素在点

  • “DepProject”是一个Maven项目,在该项目的pom文件中,它依赖于另一个工件: 现在,当我对我的项目执行“gradle dependencies”时,它正确地表明我应该通过传递依赖项解析获得solrj依赖项,但它不尊重4.4.0版本声明,相反,我的项目获得了5.5.4版本的依赖项。 这些行在依赖关系报告中出现几次,始终相同。 然后在结果的“gradle dependencies”调用中