前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【maven坑】如何进行依赖冲突排查

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

作者头像
林老师带你学编程
发布2019-05-26 16:47:09
1.6K0
发布2019-05-26 16:47:09
举报
文章被收录于专栏:强仔仔强仔仔

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1435812

今天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代码如下所示:

代码语言:javascript
复制
<!--添加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中查看依赖的工具。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年07月30日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档