zoukankan      html  css  js  c++  java
  • Jar包冲突解决方法

    前言

    对于Jar包冲突问题,我们开发人员经常都会有碰到,当我们使用一些jar包中的类、方法等,或者有时遇到一些日志系统的问题(参考另一篇文章Jar包冲突导致的日志问题),我们会遇到ClassNotFoundException,NoSuchFieldException,NoSuchMethodException 之类的运行时异常,从经验上我们就会判断,Jar包冲突了。解决Jar包冲突问题,每个人都有每个人的方法,这里我介绍一下我的方法,供大家参考。

    处理方法

    当遇到jar包冲突时,我们首先确定是哪个jar包冲突了,这个很容易,看我们调用的类或方法,是属于哪个Jar包。然后就是要找出冲突了,我这里使用命令
    mvn dependency:tree -Dverbose -Dincludes=<groupId>:<artifactId>
    填写上Jar包的groupId和artifactId,可以只有一个,但是中间的冒号不要少,这样就会输出依赖树,而且是仅包含这个Jar包的依赖树,这样那些地方依赖了这个Jar包的那个版本就一目了然了。
    例如,我的项目中notify-common包存在冲突,我们使用命令
    mvn dependency:tree -Dverbose -Dincludes=:notify-common
    得到依赖树输出

    [INFO] com.taobao.wlb:bis-server:war:1.0-SNAPSHOT
    [INFO] +- com.taobao.wlb:bis-core:jar:1.0-SNAPSHOT:compile
    [INFO] |  - com.taobao.logistics:schedule-client:jar:1.1.1:compile
    [INFO] |     - (com.taobao.notify:notify-common:jar:1.8.15:compile - omitted for conflict with 1.8.19.26)
    [INFO] - com.taobao.notify:notify-tr-client:jar:1.8.19.26:compile
    [INFO]    +- com.taobao.notify:notify-common:jar:1.8.19.26:compile
    [INFO]    - com.taobao.notify:notify-remoting:jar:1.8.19.26:compile
    [INFO]       - (com.taobao.notify:notify-common:jar:1.8.19.26:compile - omitted for duplicate)  
    

    看一下依赖树中所有的叶子节点就是所有的notify-common包,我们可以看到我们依赖的bis-core中依赖了schedule-client包,它依赖了一个notify-common包,版本是1.8.15,第四行的后面也提示了这个包同其他包有冲突
    - omitted for conflict with 1.8.19.26)。而我们的系统依赖的notify-tr-client包所依赖的版本是1.8.19.26,于是我们知道是这里冲突了,在POM排除掉依赖,OK了。

    说明

    这里我们对我们执行的命令做一个简单的说明。
    mvn dependency:tree -Dverbose -Dincludes=<groupId>:<artifactId>
    第一部分mvn dependency:tree是maven依赖的分析命令,作用是对我们的项目的依赖进行分析,并输出项目依赖树
    第二部分-Dverbose的作用是添加了verbose一个环境变量,起的作用是在分析项目依赖时输出明细,这样项目中依赖的所有引用都会被输出出来,包含了所有的间接引用,会有很多很多,我们只需要我们要找的,所以就需要第三个参数了

    第三部分-Dincludes=<groupId>:<artifactId>的作用就是进行过滤,只包含我们想要的依赖的依赖时,排除掉其它不需要的,依赖树的所有叶子节点就是我们的找的依赖包。其中的groupId和artifactId可以只填写一个,为了保证准确性,一般都会填两个(填写时不包括尖括号)。

    其他方法:

    1、对于maven工程,我的办法是使用eclipse来解决,点开pom.xml,切换到hierarchy dependency,右上角搜索对应的包,可以清晰地看到冲突版本

    2、可以使用idea,在pom.xml中右单击 选择Diagrams-》show dependencies

    3、mvn dependency:tree -Dverbose > tree.log 
    直接输出冲突的jar文件

  • 相关阅读:
    Bootstrap 2.2.2 的新特性
    Apache POI 3.9 发布,性能显著提升
    SQL Relay 0.48 发布,数据库中继器
    ProjectForge 4.2.0 发布,项目管理系统
    红帽企业 Linux 发布 6.4 Beta 版本
    红薯 快速的 MySQL 本地和远程密码破解
    MariaDB 宣布成立基金会
    Percona XtraBackup 2.0.4 发布
    Rocks 6.1 发布,光盘机群解决方案
    精通Servlet研究,HttpServlet的实现追究
  • 原文地址:https://www.cnblogs.com/adolfmc/p/7267106.html
Copyright © 2011-2022 走看看