我们创建了一个项目,项目中使用到了两个jar包,一个是A,一个是B,但是A和B ,jar包同时依赖C jar包,但是A依赖C的1.0版本,B依赖的是C的2.0版本,那么maven会将所有的jar包都会下载下来,但是在使用jar包的时候会根据最短路径原则来使用,那么就会造成只会使用其中1个C的jar包,或许只会使用C1.0,或许只会使用C1.1jar包,那么可能就会造成类找不到,或者方法找不到的问题发生,那么这就是依赖冲突以及依赖冲突会引起的问题;
暴力解决,直接删除冲突的jar (前提是你能找到)
单依赖过滤
同依赖过滤直接处理:可以过滤一个或者多个,如果过滤多个要写多个<exclusion>。这个也解决不了我的问题,或者说解决太麻烦,我那里知道hbase要依赖那些包,记不住。 (如果知道问题的依赖包 使用这种最好)
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase</artifactId>
<version>0.94.17</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
多依赖过滤
把所有依赖都过滤了。手起刀落~啊,世界都安静了。 (自己测试下项目看看还能用不 如果项目没问就就ok)
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase</artifactId>
<version>0.94.17</version>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
我们还可以限制依赖的关系
在dependency配置中如果没有写scope默认就是compile范围,依赖的传递主要是针对compile作用域
我们换成 provided范围指的是在编译和测试的过程有效,最后生成包时不会加入
以上方式是不是很麻烦 有没有简便的方案 当然有 maven help 插件 在IDEA 插件库中自己下载安装
使用步骤:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_45203607/article/details/120651968
内容来源于网络,如有侵权,请联系作者删除!