【maven坑】如何进行依赖冲突排查

本文介绍了一种SpringBoot项目中因依赖冲突导致StackOverflowError错误的情况,并详细分析了解决过程,包括如何定位问题依赖及排除特定依赖的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天springboot打包成jar后,利用java -jar xxx.jar启动的时候报下面错误:

1.错误提取

错误来源于:Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12,所以可以看出是因为依赖冲突,导致StackOverflowError错误。

2.错误分析

现在又遇到一个很尴尬的问题,pom文件的依赖实在太多了,根部不知道从何下手。没办法所以只能先看一下整个依赖里面slf4j-log4j12是在哪里,查找了一遍果然找到相关的依赖,slf4j-log4j12如下图所示:

根据jar的pom文件可以看出,这个slf4j-log4j12依赖父级是org.slf4j,然后想着去我的pom文件中查找一下就可以了,然后就尴尬了,发现没有这个依赖。可是为什么没有这个依赖,会有jar加载到项目中去呢,分析一下基本可以断定,应该是其它依赖的子依赖有引用到org.slf4j这个依赖。

3.问题排查

那怎么看到底是哪一个依赖引用到了org.slf4j依赖呢,这边我们可以用idea的一个查看依赖的功能。

打开之后如下所示:

4.修复bug

从这个图我们可以很明显的看出,是zookeeper依赖引用了slf4j-log4j12依赖,所以我们只要在zookeeper依赖中使用exclusion进行依赖接触可以了,具体pom代码如下所示:

<!--添加zookeeper依赖-->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.5</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

然后重新启动就可以看下下面让你开心的打印信息了。

总结:

这种问题在maven项目很常见,本质就是依赖问题,但是虽然问题很常见,可是解决的过程却特别繁琐。因为有时候你不知道哪里出问题,又不能用debug进行调试,所以我们只能借助仅存的错误提示来排查错误。这个时候我们更应该借助工具的作用,比如今天讲到的idea中查看依赖的工具。

想要更多干货、技术猛料的孩子,快点拿起手机扫码关注我,我在这里等你哦~

                                                       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值