解决 SLF4J: Class path contains multiple SLF4J bindings.

news2024/12/23 12:21:37

1. 异常现象

启动springboot项目,抛出警告信息:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/quanll5/Documents/java_repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/quanll5/Documents/java_code/datahup/replicator/client.core-4.2.19-SNAPSHOT.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.2.RELEASE)

2. 排查分析

从警告信息来来看,有2个jar包都出现了 /org/slf4j/impl/StaticLoggerBinder.class 这个类,于是发生了冲突,不知道绑定哪个

这2个jar包分别是:

  • logback-classic-1.2.3.jar
  • client.core-4.2.19-SNAPSHOT.jar

client.core-4.2.19-SNAPSHOT.jar 是我打包的SDK,解压打开,确实有这么一个类 /org/slf4j/impl/StaticLoggerBinder.class

在这里插入图片描述

3. 解决方案

只能选择其中一个jar包的/org/slf4j/impl/StaticLoggerBinder.class

我选择保留 logback-classic-1.2.3.jar,怎么去掉 client.core-4.2.19-SNAPSHOT.jarStaticLoggerBinder.class ?

那就要设置一下maven打包插件,在 maven-shade-plugin 插件用 exclude 排除 org/slf4j/** ,避免打包进来。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-shade-plugin</artifactId>
     <version>2.4.3</version>
     <executions>
         <execution>
             <phase>package</phase>
             <goals>
                 <goal>shade</goal>
             </goals>
             <configuration>
                 <filters>
                     <filter>
                         <artifact>*:*</artifact>
                         <excludes>
                             <exclude>META-INF/*.SF</exclude>
                             <exclude>META-INF/*.DSA</exclude>
                             <exclude>META-INF/*.RSA</exclude>
                             <exclude>org/springframework/**</exclude>
                             <exclude>org/slf4j/**</exclude>
                         </excludes>
                     </filter>
                 </filters>
                 <transformers>
                     <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                         <mainClass></mainClass>
                     </transformer>
                 </transformers>
             </configuration>
         </execution>
     </executions>
 </plugin>

4. 总结

由于 client.core-4.2.19-SNAPSHOT.jar 是我打包的,把三方依赖的源码也包进来了,适合打包阶段用maven插件排除然后被别的项目使用,也就是上述方案。反而不适合别的项目用exclusion排除,因为排不掉:

<dependency>
    <groupId>com.midea.otter</groupId>
    <artifactId>client.core</artifactId>
    <version>4.2.19-SNAPSHOT</version>
    <exclusions>
        <exclusion>
        	<groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

如果你是引入ZK等依赖,它们内部用pom文件管理三方依赖,就适合这种方式,举个例子:

<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>${zookeeper.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1006677.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国内最佳的Respond替代品——SaleSmartly(ss客服)

如果响应工具最近让您失望&#xff0c;那么可能是时候开始检查一些响应替代方案以保持您的客服系统策略正常运行了&#xff01;选择正确的工具对于执行高性能的营销策略至关重要&#xff0c;该策略将为您提供最佳的投资回报率 &#xff08;ROI&#xff09;。 Respond也是一个得…

C++算法进阶系列之倍增算法解决求幂运算

1. 引言 学习倍增算法&#xff0c;先了解什么是倍增以及倍增算法的优势。如果面前有一堆石子&#xff0c;要求计算出石子的总数量。 这是一个简单的数数问题&#xff0c;可以&#xff1a; 一颗石子一颗石子的数。两颗石子两颗石子的数。三颗石子三颗石子的数。或者更多颗石子…

一志愿复录比接近1:1,计算机专业招生名额近百人,杭州师范大学考情分析

杭州师范大学 考研难度&#xff08;☆☆&#xff09; 内容&#xff1a;23考情概况&#xff08;拟录取和复试分析&#xff09;、院校概况、23初试科目、23复试详情、各专业考情分析、各科目考情分析。 正文893字预计阅读&#xff1a;3分钟 2023考情概况 杭州师范大学计算机相…

TRICONEX 4351B数字量输入模块

TRICONEX 4351B是一种数字量输入模块&#xff0c;通常用于工业控制和安全系统中。这个模块的主要功能和特点可能包括以下方面&#xff1a; 数字量输入&#xff1a;4351B模块允许连接多个数字量输入信号。这些输入通常用于监测开关状态、传感器信号或其他数字逻辑信号。 高密度…

FPGA-结合协议时序实现UART收发器(一):UART协议、架构规划、框图

FPGA-结合协议时序实现UART收发器&#xff08;一&#xff09;&#xff1a;UART协议、架构规划、框图 记录FPGA的UART学习笔记&#xff0c;以及一些细节处理&#xff0c;主要参考奇哥fpga学习资料。 本次UART主要采用计数器方法实现&#xff0c;实现uart的稳定性发送和接收功能…

利用微信二维码来实现中秋节快乐

环境准备&#xff1a; 1、python环境&#xff1b; 2、微信公众号申请&#xff1b; 实现思路是&#xff0c;将微信公众号的中秋节快乐的页面链接&#xff0c;隐藏到二维码里面&#xff0c;如果你发送的对方扫描了这个二维码&#xff0c;就会弹出对应的中秋节祝福页面。(*^▽^*…

【送书活动】畅销书《Kali Linux高级渗透测试》更新版速速查收~

文章目录 每日一句正能量前言本书概况读者对象赠书活动目录 每日一句正能量 其实&#xff0c;人生很多东西无所谓最好的&#xff0c;只要你认为值得就是最好。 前言 对于企业网络安全建设工作的质量保障&#xff0c;业界普遍遵循PDCA&#xff08;计划&#xff08;Plan&#xf…

【广州华锐互动】煤矿提升机作业VR互动实训平台

在煤矿行业中&#xff0c;安全性是无可忽视的首要任务。传统的煤矿工人培训方法&#xff0c;如理论课堂讲解、实地操作演示&#xff0c;尽管具有一定的效果&#xff0c;但往往无法真实地模拟出煤矿的复杂环境&#xff0c;工作人员在没有真正接触煤矿的情况下&#xff0c;很难理…

【web开发】7、Django(2)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、部门列表二、部门管理&#xff08;增删改&#xff09;三、用户管理过渡到modelform组件四、modelform实例&#xff1a;靓号操作五、自定义分页组件六、自定义有…

OpenCV(四十):图像分割—漫水填充

1.漫水填充原理 图像分割中的漫水填充&#xff08;Flood Fill&#xff09;算法是一种基于区域增长的像素分类方法。其原理是在图像中从种子点开始&#xff0c;逐渐向周围扩展&#xff0c;并根据一定的条件决定是否将相邻的像素归属于同一区域。 漫水填充的基本原理如下&#x…

香港银行开户内地见证流程

香港公司内地见证开户流程&#xff1a; 资料准备——银行进行资料预审——预审通过&#xff0c;预约面谈&#xff08;确定面谈时间以及在内地指定城市的分行进行面谈&#xff09;——携带齐全资料至内地指定城市分行&#xff0c;在当地银行职员的见证下签署资料——面谈通过&a…

python-爬虫-三字代码网站爬取

三字代码 http://www.6qt.net/ 爬取城市、三字代码、所属国家、国家代码、四字代码、机场名称、英文名称、查询次数 import requestsurl http://www.6qt.net/ r requests.get(url) r.encodinggb2312 print(r.text)使用xpath解析&#xff0c;得到城市名 html.fromstring(html…

管理固定资产怎么界定优化

固定资产的管理和利用是至关重要的一环。然而&#xff0c;如何准确地界定和管理这些资产&#xff0c;以实现最大的效益&#xff0c;却是一个需要深思熟虑的问题。本文旨在探讨行政管理中固定资产的界定方法以及如何进行优化管理。  我们需要明确固定资产的概念。固定资产是指…

ABB AV94a控制模块

多功能性&#xff1a; 控制模块通常设计为多功能设备&#xff0c;可以执行各种控制任务&#xff0c;包括监测传感器数据、执行逻辑操作、生成输出信号等。 可编程性&#xff1a; 许多现代控制模块都具有可编程功能&#xff0c;使用户能够根据需要自定义其行为&#xff0c;从而…

深刻理解Java中方法调用的参数传递

Java方法调用的参数传递 首先给结论&#xff1a;Java中均为值传递。 下面通过概念分析代码示例的方式&#xff0c;实现深刻理解值传递的含义&#xff0c;避免死记硬背。 Java的两种数据类型 基本数据类型&#xff0c;比如int&#xff0c;double&#xff0c;boolean等&#x…

flex布局实现 内容区域高度自适应

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 一、背景说明 对于纵向排列布局&#xff0c;且上中下个个模块都是自动高度。当我们针对中间部分需要自适应高度且进行滚动时&#xff0c;那我们就可以用flex: 1 来处理。 二 、先看效果图 二 、flex布局 <!DO…

如何使用CMD恢复删除的分区?

分区删除后可以恢复吗&#xff1f; 磁盘分区旨在二级存储上创建一个或多个区域&#xff0c;然后你可以单独管理每个区域&#xff0c;这些区域就是分区。因此&#xff0c;对新安装的存储设备进行分区是很重要的环节&#xff0c;只有分区后才可以在这些设备上创建文件并保存数…

unity 使用声网(Agora)实现语音通话

第一步、先申请一个声网账号 [Agora官网链接]&#xff08;https://console.shengwang.cn/&#xff09; 第二步在官网创建项目 &#xff0c;选择无证书模式&#xff0c;证书模式需要tokenh和Appld才能通话 第三步 官网下载SDK 然后导入到unity&#xff0c;也可以直接在unity商店…

云链商城连锁门店新零售O20系统以零售商城

云链商城连锁门店新零售O20系统以零售商城、门店收银、多渠道进销存、客户管理、互动营销、导购助手、多种奖励模式和数据分析等功能&#xff0c;赋能多品牌连锁门店实现线上线下商品、会员、场景的互联互通&#xff0c;助推企业快速实现营销、服务、效率转型升级&#xff0c;为…

可编程交易区块为DeFi机器人提供强大动力

对于选择基金投资的人来说&#xff0c;一个基本指导原则就是寻找那些管理费最低的基金。资本应该是在运转&#xff0c;而不是用于支付费用。同样&#xff0c;Mysten Lab的Capy交易机器人利用可编程交易区块&#xff08;Programmable Transaction Blocks &#xff0c;PTBs&#…