IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Caused by: java.lang.NoSuchMethodError:xxx——依赖冲突的解决 -> 正文阅读

[Java知识库]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,从右边就可以看到依赖冲突
在这里插入图片描述
以上俩种方式,找到冲突的依赖,把不是要用的依赖在原来的依赖上排除就好

例如:

<dependency>
    <groupId>com.ctrip.framework.apollo</groupId>
    <artifactId>apollo-client</artifactId>
    <version>1.7.0</version>
    <exclusions>
        <exclusion>
            <artifactId>slf4j-api</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
    </exclusions>
</dependency>

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

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());

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

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 21:29:54  更:2021-11-14 21:30:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:22:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码