首页 > 解决方案 > 依赖版本冲突 -> 不同的 slf4j 版本但不能排除错误的版本

问题描述

我有几乎相同的问题,就像这里问的一样:

Maven + SLF4J:使用需要两个不同 SLF4J 版本的两个不同依赖项时的版本冲突

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

案子:

我需要包含 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 中排除,因为它是强制性的,没有它我无法使用它。

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

标签: javahibernatemavendependenciesslf4j

解决方案


重要规则:在本地项目 P 中声明对工件 A 的依赖,比如版本 v 会覆盖 P 对 A 的依赖所做的其他声明。无论您的项目声明的版本如何,您的项目都将导入 A 版本 v A 的其他依赖项。

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

另请参阅依赖机制简介,其中指出:

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


推荐阅读