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

Maven拉一个旧版本的传递依赖

西门奇希
2023-03-14

我写了一个库,它依赖于Guava版本20.0(与JDK 1.7兼容的最后一个版本)

然后,我编写了一个使用该库的应用程序,还uk.org.lidalia: slf4j-test: 1.2.0(带有测试范围)。slf4j-test依赖于Guava的14.0.1版本。

我的问题是,我的应用程序将两个不同版本的Guava视为可传递依赖项,并选择较旧的版本。现在,当我调用库中的某些方法时,我会得到类或方法未找到异常。

我可以(并且已经)将番石榴作为slf4j测试的依赖项排除在外,这暂时解决了这个问题,但是如果我引入另一个使用番石榴的依赖项,问题将再次出现。

所以我的问题是:为什么Maven会选择依赖项的旧版本,我如何总是让它选择最新版本。

共有1个答案

杜霍英
2023-03-14

您不能强制Maven始终选择最新版本。但你可以做几件事:

>

如果这是不合适的,你可以把一个条目到依赖管理设置番石榴的版本。这将覆盖所有传递设置版本(如示例中的14.0.1)。

Maven enforcer插件有一条规则,确保所有依赖项都按照最新版本进行计算,但它不会选择最新版本,只有在未选择的情况下,它才会使构建失败。然后,您需要应用上述方法(1)或(2)自行选择。

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

  • 我有一个简单的Spring启动应用程序,我试图添加Spring Cloud consul。Spring Cloud consul依赖于较新版本的Spring启动。在我的POM中,我为所有的Spring启动工件指定了版本。 问题是,即使为指定了1.3.5版本,它仍然下载1.2.3版本的依赖项 有没有办法让maven获取所有Spring启动工件的,包括传递依赖项?我知道我可以明确列出它们,但有没有更好

  • 我遇到了以下两个依赖项的问题: org.apache.felix"org.apache.felix.utils" 和 通用域名格式。github。rotty3000»phidias»0.3.2 它们都对组织有可传递的依赖关系。奥斯基。核心,felix依赖于版本4.1.0,phidias依赖于版本5.0.0 我们需要5.0.0版本才能正确编译代码 如果我把我的依赖项作为: Maven自动获取版本4.

  • 这将打印: 在同一个文件夹中有一个poi-3.8.jar,但类路径取3.2。 我的问题是:我应该做什么,以便我的项目使用POI-3.8.jar而不是POI-3.2.jar。 非常感谢!! 编辑:的输出

  • 主要内容:依赖传递,依赖范围,依赖范围对传递依赖的影响,依赖调节Maven 依赖传递是 Maven 的核心机制之一,它能够一定程度上简化 Maven 的依赖配置。本节我们将详细介绍依赖传递及其相关概念。 依赖传递 如下图所示,项目 A 依赖于项目 B,B 又依赖于项目 C,此时 B 是 A 的直接依赖,C 是 A 的间接依赖。 Maven 的依赖传递机制是指:不管 Maven 项目存在多少间接依赖,POM 中都只需要定义其直接依赖,不必定义任何间接依赖,Mav

  • Maven正在过渡地使用guava的第16版,尽管我有一个 快速总结: 取决于 有一个父pom,