IDEA下解决Maven依赖冲突

一:问题背景.

    Maven依赖使用方便,但是出现了依赖冲突后,一般如何解决呐?本文将以IDEA为开发工具介绍一下.

                                            方式一:使用Maven-Helper插件(推荐)

    1.1 Maven插件准备.(Maven-Helper插件).

 下载后,重新启动IDEA,即可使用.

1.2 Maven-Helper使用.

点击项目的pom.xml文件.

目前项目使用的版本号是2.5的.但是有2.3的依赖存在,导致发生了冲突,如果有许多的version的,也只会使用一个其他的就会标红表示发生了依赖冲突的.

方式一:查找Source所在的位置.

方式二 查找source所在的位置.

 1.3 目前是发现了冲突所在的详细位置了,接下来就是解决冲突了.

   

   

                                                   方式二(pom.xml文件鼠标右键)

但是这个oss对象的依赖包的冲突解决了,但是会出现问题,由于那个common-lang是Apache的工具类,那个<exclusion>标签又不加version标签,如果去掉那里这里的2.3的版本和2.5的版本就都去掉了.显然是不合理的.不建议去掉这里的冲突.

                                                        方式三(Maven命令)

mvn dependency:tree -Dverbose -Dincludes=<groupId>:<artifactId>

mvn dependency:tree -Dverbose -Dincludes=com.alibaba:fastjson

简单总结一个Maven依赖冲突管理中的几个原则:

  1. 依赖是使用Maven坐标来定位的,而Maven坐标主要由GAV(groupId, artifactId, version)构成。如果两个相同的依赖包,如果groupId, artifactId, version不同,那么maven也认为这两个是不同的。(唯一性)
  2. 依赖会传递,A依赖了B,B依赖了C,那么A的依赖中就会出现B和C。(依赖传递性)
  3. Maven对同一个groupId, artifactId的冲突仲裁,不是以version越大越保留,而是依赖路径越短越优先,然后进行保留。(最短路径),
  4. 依赖的scope会影响依赖的影响范围的.
  5. 子pom依赖会优先与父pom.

两个原则:①:最短路径优先。②:相同路径时先声明优先依赖

附:IDEA自动下载文档和源码配置:

      ①:Ctrl+Alt+S

     ②:项目里面如何下载文档和源码如下:

     ③:如何项目中下载的源码类查看文档

     Ctrl+Q

     ④:查看源代码:

    按住Ctrl键,然后鼠标左键即可看到

附录:IDEA拉取https仓库跳过证书校验

一般大型项目,内网多Maven仓库基本都是https的二方仓库,不同的组件会发布到一些公司自研的仓库中,这个时候就需要在构建脚本中跳过https的校验,mvn clean package -gs settings.xml

-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true

【解决Maven大型项目导入内网二方包,飘红问题,一般来说就是Maven的缓存所致,清楚一下重新编译,Https构建速度比较快】 

 另外一点,如果是项目目录下的settings的更新后还是拉取jar包失败,这个时候可能删除一下settings的文件,再重新添加一下即可,Maven缓存所致.

【排除一些低版本的依赖包,然后在pom中高版本的包,注意新旧特性是否兼容】,或者是直接升级三方依赖包.

查找依赖方式

Ctrl+F 

依赖分析命令:

mvn dependency:tree -Dverbose -Dincludes=snappy-java

mvn dependency:tree -Dverbose -Dincludes=<groupId>:<artifactId>(指定依赖的冲突)

mvn -X compile dependency:tree -Dverbose >a.log(分析指定的依赖关系并重定向至文件中)

mvn -U clean package -Dmaven.test.skip=true enforcer:enforce -DcheckDeployRelease_skip=true -Denforcer.skip=false(打包跳过测试)

mvn dependency:tree -Dverbose(分析项目中所有jar冲突)

mvn dependency:tree -Dverbose |grep "omitted for duplicate" 【Linux】

windows下查询冲突. 

mvn dependency:tree -Dverbose |find "omitted for duplicate"【Windows】

新版IDEA推荐升级情况 

 

  • 19
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大道之简

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值