美文网首页
版本依赖异常问题排查

版本依赖异常问题排查

作者: 喏喏2021 | 来源:发表于2022-01-20 22:34 被阅读0次

1. 背景

我们在使用maven经常会遇到各种版本的问题,比如

  • 多个依赖中包含了同一个资源依赖,但他们版本不一样,一下也不清楚实际依赖的哪个版本
  • 因为依赖的版本不对的原因,我们的项目没有成功启动,有时可能直接还看不出是哪个依赖有问题
  • 即使项目启动成功,程序跑着跑着,突然报了一个错,比如像下面这个:


    一个突然的异常.png

    可能突然看到这个,你可能都有点蒙,是正常的,谁能一下子能看了出来,稍加研究一下,你大概找到了下面这个jar包

<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-log4j12</artifactId>
   <version>1.7.5</version>
</dependency>

找到了,还不一定有用,是不是这个版本在生效,是高了,还是低了呢?

2. 一般排查过程

1)我们可以使用maven一般依赖的知识,有两个基本依赖的原则:
  • 路径深浅原则,越短的越优先
  • 同一路径的,顺序在前的有效
2)其实呢,我们不需要研究这么细,一般的IDE都有直接查看的方法,拿在eclipse中举例:
eclipse打开pom文件,可以看到的几个标签.png

这时,我们可以在打开的页面中,有左右两个布局,
左边是所有包的依赖树,右边是最后生效的依赖包,包括版本号,右上角有一个搜索框,
这时我们可以搜索刚才的依赖,这里我们输入slf4j,找到相应的依赖后,单击后,左树就显示出了这个依赖所有相关的依赖目录树
这里有时就是不同版本的包,有冲突了,不是期望的版本生效了,这时一般排除一下不用的版本就可以了。

3)查找具体的类查看

有时少数,上面的排除还是不能解决问题,这个我们需要查看具体的类内容


查看具体类内容.png

这时,我们从左边生效的jar包中找到相应的类,有时可能找不到这个类,当然这个例子中,类是有的,只是版本的问题,这个版本中
没有这个方法,这样,我们心里大概有了数,就是当前这个版本不对,可能是低了,也可能是高了,当然大多数情况下,是低了,一般
情况下,都会做向下兼容,后来呢,我们找到了高一点版本的依赖,最后就使用通过了(可用的版本是1.7.30),

package org.slf4j.helpers;

/**
 * An internal utility class.
 *
 * @author Alexander Dorokhine
 * @author Ceki G&uuml;lc&uuml;
 */
public final class Util {

    
    private Util() {
    }

    public static String safeGetSystemProperty(String key) {
        if (key == null)
            throw new IllegalArgumentException("null input");

        String result = null;
        try {
            result = System.getProperty(key);
        } catch (java.lang.SecurityException sm) {
            ; // ignore
        }
        return result;
    }

    public static boolean safeGetBooleanSystemProperty(String key) {
        String value = safeGetSystemProperty(key);
        if (value == null)
            return false;
        else
            return value.equalsIgnoreCase("true");
    }

稍占点篇幅,贴一下神秘出现的方法代码safeGetBooleanSystemProperty,很棒!
你也感觉很棒吧,来点个赞吧!-_-

相关文章

网友评论

      本文标题:版本依赖异常问题排查

      本文链接:https://www.haomeiwen.com/subject/ohgjhrtx.html