栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Caused by: java.lang.NoSuchMethodError:xxx——依赖冲突的解决

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Caused by: java.lang.NoSuchMethodError:xxx——依赖冲突的解决

前因后果 1、背景

最近在给一个项目的配置迁移Apollo,遇到了一个问题,就是我引入了Apollo的相关依赖,但就是用不了,测试的时候就疯狂报错,最终原因是Caused by: java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch

2、处理过程

这个原因呢,一看就知道是依赖冲突的问题,我的是guava依赖的问题,就用了常用的方法排除依赖,但还是没得到解决。这可怎么办呢,依赖冲突一般就是因为依赖版本用的不是我们想用的,也就是方法调用的时候并没有用到我们想让它调用的,而是调用了其他依赖中的方法,emm~,想到一个方法,就是我们在报异常的前一步,看下它到底调用的那个依赖里边的,然后再想办法解决

3、解决方式

经过上边的处理,我知道了它调用的并不是我想用调用的依赖的版本,而是调用了hive中一个依赖中的guava依赖版本,这个版本依赖低,所以才会出现异常,我的处理方式是将我想调用的guava依赖提前在另一个总是调错依赖的hive依赖前边,问题得以解决(其实一般这种依赖冲突,直接采用排除的方式就好)下边我就详细介绍下如何处理依赖冲突了

依赖冲突的解决 一、问题

Caused by: java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch;

二、解决方法: 1、命令查看依赖冲突
mvn dependency:tree -Dverbose
2、通过idea插件查看依赖冲突

(1)添加Maven Helper插件(File->Settings->Plugins,install Maven Helper)

(2)打开pom文件,点击Dependency Analyzer,选择Conflicts,从右边就可以看到依赖冲突

以上俩种方式,找到冲突的依赖,把不是要用的依赖在原来的依赖上排除就好

例如:


    com.ctrip.framework.apollo
    apollo-client
    1.7.0
    
        
            slf4j-api
            org.slf4j
        
    

有时把看到的依赖都已经排除出去了,但还是有问题,此时就要用第三种方法了

3、查看我们调用的地方到底用的是哪个依赖里的

在你程序抛异常的那句话上面加上如下代码

以下三个之一就可以

(1)

System.out.println(this.getClass().getResource("/com/google/common/base/Stopwatch.class"));

(2)

java.security.ProtectionDomain pd = Stopwatch.class.getProtectionDomain();

CodeSource cs = pd.getCodeSource();

System.out.println(cs.getLocation());

(3)

ClassLoader cl = Stopwatch.class.getClassLoader();
System.out.println(cl.getResource(“com/google/common/base/Stopwatch.class”).getPath());

通过打印在运行过程中报异常的类到底是加载哪个依赖下的,就可以知道是不是用的我们想让它用的依赖的。此时处理掉这个不用的依赖就好了(也就是在由此依赖的依赖排除出去),或者调换依赖顺序,将我们真正用的依赖提到前边就可以了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/490281.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号