maven包循环依赖。导致溢出定位加解决

Posted tecnologycc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven包循环依赖。导致溢出定位加解决相关的知识,希望对你有一定的参考价值。

通过命令 mvn denpendency:tree

可以打印出  当前工程的maven依赖路径

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ bnq_worker ---
[INFO] com.bnq:bnq_worker:war:1.0.0-SNAPSHOT
[INFO] +- com.bnq:bnq_biz:jar:1.0-SNAPSHOT:compile
[INFO] |  +- com.bnq:auth_client:jar:1.0-SNAPSHOT:compile
[INFO] |  |  \- com.bnq:bnq_core:jar:1.0-SNAPSHOT:compile

看着略显复杂,离上一行空的远一点

每一行的|待表层级 他的上一级是引入下一级的这样一个关系  +号代表还有兄弟节点。-号代表当前层级的最后一个节点。 |就是层级 1刚2刚。

当项目比较复杂的时候,就可以利用这个解决。当项目中报某某两个Jar循环依赖了,就找出引入他的那个jar 再找出对应的maven  exclusions即可

 

常见问题如:Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflow
log4j-over-slf4j.jar 引入的maven是

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>log4j-over-slf4j</artifactId>
    <version>1.7.26</version>
</dependency>

从maven tree中判断到引入的这个jar包的是这个jar  com.bnq.jz:dcmall-api-client:jar:1.0-SNAPSHOT:compile
  对应Maven是

<dependency>
<groupId>com.bnq.jz</groupId>
<artifactId>dcmall-api-client</artifactId>
<version>1.0-SNAPSHOT</version>

</dependency>
然后加入exclusion 让他不引入log4j-over-slf4j maven 就不会引入这个jar包。改成
<dependency>
<groupId>com.bnq.jz</groupId>
<artifactId>dcmall-api-client</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>

重新更新Maven 问题就解决了。
这个如果项目maven引入超级复杂。那只能靠此类方法解决。idea中通过maven show dependency这种方法 好多人提到。但是如果项目特别复杂。估计也捉襟见肘

 

以上是关于maven包循环依赖。导致溢出定位加解决的主要内容,如果未能解决你的问题,请参考以下文章

maven依赖导致的jar包冲突解决方式

Maven学习总结(59)—— Maven Jar 包冲突最全解决方案总结

Maven学习总结(59)—— Maven Jar 包冲突最全解决方案总结

WPF UserControl:使多个链接的依赖项属性保持同步,而不会导致递归循环 堆栈溢出

idea下一次Jar包依赖问题的解决过程

如何快速的解决Maven依赖冲突