您当前的位置: 首页 >  ar

Maven Helper插件解决jar包冲突

梁云亮 发布时间:2020-04-20 15:31:48 ,浏览量:3

原理

Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的。Maven的依赖机制会导致Jar包的冲突。举个例子,现在你的项目中,使用了两个Jar包,分别是A和B。现在A需要依赖另一个Jar包C,B也需要依赖C。但是A依赖的C的版本是1.0,B依赖的C的版本是2.0。这时候,Maven会将这1.0的C和2.0的C都下载到你的项目中,这样项目中就存在了不同版本的C,这时Maven会依据依赖路径最短优先原则,来决定使用哪个版本的Jar包,而另一个无用的Jar包则未被使用,这就是所谓的依赖冲突。 在大多数时候,依赖冲突可能并不会对系统造成什么异常,因为Maven始终选择了一个Jar包来使用。但是,不排除在某些特定条件下,会出现类似找不到类的异常,所以,只要存在依赖冲突,最好还是解决掉,不要给系统留下隐患。

当dependency A自身的依赖B,与其他dependency存在冲突的时候(最常见的就是版本冲突),我们就需要把B排除掉,这时就需要使用exclusions元素。比如: 在这里插入图片描述

解决依赖版本冲突的方法,就是将不想要或低版本的传递依赖去除掉。具体做法是:使用Maven提供的标签,标签需要放在标签内部,比如:

	
    org.apache.hbase
    hbase-server
    2.1.3
    
    
        
            org.apache.avro
            avro
        
    

hbase-server本身是依赖了org.apache.avro,但是因为一些其他的模块也依赖了org.apache.avro,并且两个org.apache.avro版本不同,所以我们使用标签排除掉所依赖的org.apache.avro1.7.4,这样Maven就不会下载org.apache.avro1.7.4了,也就保证了我们的项目中只有一个版本的org.apache.avro。

去除掉后刷新maven即可

Maven Helper插件使用示例

借助Maven Helper插件可以知道项目中哪些依赖的Jar包冲突,具体使用方法如下:

假设pom中有如下两个依赖(当然这个示例没有任何意义,只是介绍Maven Helper插件的用法) 在这里插入图片描述 在插件安装好之后,我们打开pom.xml文件,在底部会多出一个Dependency Analyzer选项 在这里插入图片描述 切换到此试图即可进行相应操作:

  • Conflicts(查看冲突)
  • All Dependencies as List(列表形式查看所有依赖)
  • All Dependencies as Tree(树形式查看所有依赖)

在这里插入图片描述 在这里插入图片描述

扩展

除了使用Maven Helper查看依赖冲突,也可以使用IDEA提供的方法——Maven依赖结构图,打开Maven窗口,选择Dependencies,然后点击下图方框中的图标(Show Dependencies)或者使用快捷键(Ctrl+Alt+Shift+U),即可打开Maven依赖关系结构图。 在这里插入图片描述 在图中,我们可以看到有一些红色的实线,这些红色实线就是依赖冲突,蓝色实线则是正常的依赖。

在这里插入图片描述 在这里插入图片描述

关注
打赏
1688896170
查看更多评论

梁云亮

暂无认证

  • 3浏览

    0关注

    1121博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.1168s