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学习总结(59)—— Maven Jar 包冲突最全解决方案总结
Maven学习总结(59)—— Maven Jar 包冲突最全解决方案总结