java - 依赖版本冲突 -> 不同的 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 中排除,因为它是强制性的,没有它我无法使用它。
是否有机会检查依赖项来自何处或如何排除旧版本(以防它与新版本一起使用)?
解决方案
重要规则:在本地项目 P 中声明对工件 A 的依赖,比如版本 v 会覆盖 P 对 A 的依赖所做的其他声明。无论您的项目声明的版本如何,您的项目都将导入 A 版本 v A 的其他依赖项。
在您的情况下,明确声明您想要的slf4j-api 依赖项以及所需的绑定。
另请参阅依赖机制简介,其中指出:
依赖中介——这决定了当遇到工件的多个版本时将使用哪个版本的依赖。目前,Maven 2.0 仅支持使用“最近定义”,这意味着它将使用依赖树中与您的项目最接近的依赖版本。您始终可以通过在项目的 POM 中明确声明来保证版本
推荐阅读
- python - 根据不同的行分组和求和
- python - 我无法从一对一关系中的字段中获取值,tabularinline
- google-cloud-speech - 谷歌云语音,无口音的词
- regex - Hugo标签之间的正则表达式匹配
- layout - ASP.Net Core MVC 布局问题
- powershell - Powershell 中 Windows 系统安装程序脚本的 Visual Studio Code 的任务名称
- jcache - 当因达到 MaxObjects 而从 JCS 中删除项目时收到通知
- java - Quarkus Multimaven 容器化环境中的 Kafka 消息传递
- c++ - 在更现代的 cmake 中使用箭头镶木地板的最佳方法是什么?
- javascript - PACT.io:获取丢失的请求错误和错误:禁止跨源 http://localhost