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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linzhiqiang0316/article/details/81292554

今天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的一个查看依赖的功能。

扫描二维码关注公众号,回复: 2955627 查看本文章

打开之后如下所示:

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中查看依赖的工具。

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

                                                       

猜你喜欢

转载自blog.csdn.net/linzhiqiang0316/article/details/81292554