【问题标题】:Dependencies version conflict -> different slf4j versions but can't exclude wrong one依赖版本冲突 -> 不同的 slf4j 版本但不能排除错误的版本
【发布时间】:2019-01-14 21:09:23
【问题描述】:

我的问题几乎和这里问的一样:

Maven + SLF4J: Version conflict when using two different dependencies that require two different SLF4J versions

(但不幸的是,所有答案都对我们的情况没有帮助)

案例:

我需要包含 firebase 依赖项

<dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>5.11.0</version>
</dependency>

这取决于 slf4j 版本 1.7.25。

之后我们实施了一些集成测试(使用 spring 和 junit),现在我们面临冲突

SLF4J:您的 slf4j 绑定请求的版本 1.5.6 与 [1.6, 1.7] 不兼容

SLF4J:请参阅http://www.slf4j.org/codes.html#version_mismatch 了解更多详情。

但是当我运行“mvn dependency:tree”时,我看不到对 slf4j 的任何其他依赖。所以这显然是项目“外部”的东西。

我也无法将 slf4j 从 firebase 中排除,因为它是强制性的,没有它我无法使用它。

是否有机会检查依赖项来自何处或如何排除旧版本(以防它与新版本一起使用)?

【问题讨论】:

  • 请在问题中提供你的依赖树。

标签: java hibernate maven dependencies slf4j


【解决方案1】:

重要规则:在本地项目 P 中声明对工件 A(例如版本 v)的依赖会覆盖 P 对 A 的依赖项所做的其他声明。您的项目将导入版本 v ,而不管 A 的其他依赖项声明的版本。

在您的情况下,显式声明 slf4j-api 所需的依赖项以及所需的绑定。

另见Introduction to the Dependency Mechanism,其中指出:

依赖中介 - 这决定了依赖的版本 当遇到工件的多个版本时将使用。 目前,Maven 2.0 仅支持使用“最近定义” 这意味着它将使用最接近的依赖版本 你的项目在依赖树中。您始终可以保证 通过在项目的 POM 中明确声明版本

【讨论】:

  • 感谢您的回复。不幸的是,这并没有帮助,当我指定 Firebase (1.7.25) 所需的版本时 -> 我会得到与 >SLF4J: The requested version 1.5.6 by your slf4j binding is not compatible with [1.6, 1.7 ] 并且当我准确指定较低版本时(比如说 1.5.6)-> 那么 firebase 缺少一些功能,因此它不会进行事件编译。
  • 您需要明确声明 BOTH slf4j-api 和您想要的 BINDING。
猜你喜欢
  • 2012-02-13
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
  • 2021-06-12
  • 1970-01-01
  • 2019-06-25
  • 2021-09-03
相关资源
最近更新 更多