问题3:莫名多一个slf4j的实现包

1. 报错

SLF4J: Class path contains multiple SLF4J bindings
本文是log4j与logback冲突了。检查了所有的pom.xml文件。没有log4j的依赖。在启动的时候会报发现多个slf4j的绑定。项目实际用的是logback。为什么还是会去检查log4j???
在这里插入图片描述
该问题已解决。如下图所示。已经不报多个绑定的错误了。
在这里插入图片描述

2. 错误原因

出现这种问题的根本原因是项目中确实存在了多个slf4j的绑定。这是毋庸置疑的。
但问题是,在我们项目中的几个模块里的pom文件都没有声明引用log4j,只声明了logback的引用,为什么slf4j还会找到两个绑定?
答案肯定是:既然你没有显式引用,那肯定是在哪个地方偷偷地引用了啊。你通过maven坐标引用的jar包里,肯定有冲突的jar包。

如下图所示。在我们的这个项目中,在core模块添加如下坐标。

<dependencies>
        <dependency>
            <groupId>com.github.wenweihu86.raft</groupId>
            <artifactId>raft-java-core</artifactId>
            <version>1.8.0</version>
		</dependency>
</dependencies>

这个坐标。它里面就含有了log4j的jar包,因为这个项目打包发布的时候,把slf4j的具体绑定一同打包了。

在这里插入图片描述

3. 解决办法

在上面的坐标里加上 <exclusions> 标签。该标签顾名思义就是排除一些东西。

<!--exclude log4j in raft-brpc-core-->
<exclusions>
     <exclusion>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-slf4j-impl</artifactId>
     </exclusion>
     <exclusion>
         <groupId>org.apache.logging.log4j</groupId>
         <artifactId>log4j-core</artifactId>
     </exclusion>
 </exclusions>

在这里插入图片描述
由上图可以看出,将需要排除的jar包的maven坐标放进去之后,maven会自动将这些jar包从当前项目移除。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值