【Arthas案例】某应用依赖两个GAV-classifier不同的snakeyaml.jar,引起NoSuchMethodError

多个不同的GAV-classifier依赖冲突,引起NoSuchMethodError

Maven依赖的三坐标体系GAV(G-groupId,A-artifactId,V-version)

classifier通常用于区分从同一POM构建的具有不同内容的构件物(artifact)。它是可选的,它可以是任意的字符串,附加在版本号之后。

【案例1】某应用依赖两个GAV-classifier不同的snakeyaml.jar,引起NoSuchMethodError

1.完整的异常调用栈【从案发现场找线索】

警察抓犯人,收集线索是破案的关键所在。

完整的异常调用栈

2.关键的异常日志

从异常信息中收集有用的线索。

java.lang.NoSuchMethodError: org.yaml.snakeyaml.constructor.SafeConstructor.<init>(Lorg/yaml/snakeyaml/LoaderOptions;)Vat org.apache.dubbo.rpc.cluster.router.condition.config.model.ConditionRuleParser.parse(ConditionRuleParser.java:44)

java.lang.NoSuchMethodError that class no longer has a definition of that method.
该类不再具有该方法的定义。

java.lang.NoSuchMethodError

3.案发现场的源代码

org.apache.dubbo.rpc.cluster.router.condition.config.model.ConditionRuleParser.parse(ConditionRuleParser.java:44)

  • jad - 反编译指定已加载类的源码
[arthas@41915]$ jad org.apache.dubbo.rpc.cluster.router.condition.config.model.ConditionRuleParser parse

ConditionRuleParser.java:44,与异常信息对上了。

ConditionRuleParser.java:44

org.yaml.snakeyaml.constructor.SafeConstructor点击链接到snakeyaml-1.23-android.jar

SafeConstructor

org.yaml.snakeyaml.constructor.SafeConstructor

4.应用里依赖两个snakeyaml.jar是怎么回事?

Maven: org.yaml:snakeyaml:1.26,依赖管理声明自spring-boot-dependencies
Maven: org.yaml:snakeyaml:android:1.23,从其他依赖透明传递下来

snakeyaml.jar

5.使用Arthas命令确认已加载的类信息和方法信息

class/classloader 相关

破案杀手锏

  • sc - 查看 JVM 已加载的类信息
  • sm - 查看已加载类的方法信息
[arthas@41915]$ sc -d org.yaml.snakeyaml.constructor.SafeConstructorclass-info        org.yaml.snakeyaml.constructor.SafeConstructorcode-source       /Users/lihuagang/.m2/repository/org/yaml/snakeyaml/1.23/snakeyaml-1.23-android.jarname              org.yaml.snakeyaml.constructor.SafeConstructorisInterface       falseisAnnotation      falseisEnum            falseisAnonymousClass  falseisArray           falseisLocalClass      falseisMemberClass     falseisPrimitive       falseisSynthetic       falsesimple-name       SafeConstructormodifier          publicannotationinterfacessuper-class       +-org.yaml.snakeyaml.constructor.BaseConstructor+-java.lang.Objectclass-loader      +-sun.misc.Launcher$AppClassLoader@18b4aac2+-sun.misc.Launcher$ExtClassLoader@4d95d2a2classLoaderHash   18b4aac2Affect(row-cnt:2) cost in 34 ms.[arthas@41915]$ sm org.yaml.snakeyaml.constructor.SafeConstructor <init>
org.yaml.snakeyaml.constructor.SafeConstructor <init>()VAffect(row-cnt:2) cost in 55 ms.[arthas@41915]$ sm -d org.yaml.snakeyaml.constructor.SafeConstructor <init>declaring-class   org.yaml.snakeyaml.constructor.SafeConstructorconstructor-name  <init>modifier          publicannotationparametersexceptionsclassLoaderHash   18b4aac2

sc -d org.yaml.snakeyaml.constructor.SafeConstructor

sm org.yaml.snakeyaml.constructor.SafeConstructor

  • 通过sc -d org.yaml.snakeyaml.constructor.SafeConstructor,可以看到其加载自snakeyaml-1.23-android.jar
  • 通过sm org.yaml.snakeyaml.constructor.SafeConstructor <init>,可以看到没有org.yaml.snakeyaml.constructor.SafeConstructor#SafeConstructor(org.yaml.snakeyaml.LoaderOptions)构造函数的方法签名。
  • 综上所述,与异常信息完全符合。

6.解决方法

snakeyaml-1.23-android.jar依赖排除掉,搞定。


祝大家玩得开心!ˇˍˇ

广益,杭州

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/794907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

泰坦尼克号幸存者数据分析

泰坦尼克号幸存者数据分析 1、泰坦尼克号数据集2、数据集加载与概览3、泰坦尼克号幸存者数据分析4、哪些人可能成为幸存者&#xff1f; 1、泰坦尼克号数据集 泰坦尼克号的沉没是世界上最严重的海难事故之一&#xff0c;造成了大量的人员伤亡。这是一艘号称当时世界上最大的邮轮…

​​​​​​​【人工智能】手写数字识别

手写数字识别 实验背景 数据集介绍 MNIST数据集包含了一系列的手写数字图像&#xff0c;包括0到9的数字。每张图像都是灰度图像&#xff0c;尺寸为28x28像素。数据集共包含60000张训练图像和10000张测试图像。 MNIST数据集的目标是通过训练一个模型&#xff0c;使其能够正确地识…

Spring Boot 集成 RabbitMQ(二)

什么是Spring Boot&#xff1a; Spring Boot是Spring Framework的简化版&#xff0c;其目标是使用尽可能少的配置来简化Spring应用的开发、部署和维护。它根据项目的依赖关系自动配置Spring环境&#xff0c;开箱即用。 什么是RabbitMQ&#xff1a; RabbitMQ是一种开源的、实…

彩虹聚合DNS管理系统v1.0全新发布

聚合DNS管理系统&#xff08;https://github.com/netcccyun/dnsmgr&#xff09;可以实现在一个网站内管理多个平台的域名解析&#xff0c;目前已支持的域名平台有&#xff1a;阿里云、腾讯云、华为云、西部数码、CloudFlare。本系统支持多用户&#xff0c;每个用户可分配不同的…

vscode+anaconda 环境python环境

环境说明&#xff1a; windows 10 vscodeanaconda anaconda 安装&#xff1a; 1、官网下载地址:Free Download | Anaconda 2、安装 接受协议&#xff0c;选择安装位置&#xff0c;一直next&#xff0c;到下面这一步&#xff0c;上面是将Anaconda 添加至环境变量&#xff0…

社恐!!!

社恐 1. 独自灿烂去吧&#xff0c;不要在乎任何人的眼光&#xff01; 链接: link 在人群中扭扭捏捏&#xff0c;总觉得别人关注自己 其实你看根本无人在意我&#xff0c;对于他们而言我只是他们日常生活中的一个配角。大家都关注着自己&#xff0c;根本不会有人分心来关注我…

linux使用supervisor部署springboot

supervisor 美&#xff1a;[suːpərvaɪzər ] n.监督人;主管人;指导者; Supervisor是一个进程控制系统工具&#xff0c;用于在Linux系统上管理和监控其他进程。它可以启动、停止、重启和监控应用程序或服务&#xff0c;并在其异常退出时自动重启它们。Supervisor通过提供一个…

spring 和spring boot的区别

Spring是一个开源的Java开发框架&#xff0c;旨在简化Java应用程序的开发。它提供了一个综合的编程和配置模型&#xff0c;用于构建各种类型的应用程序&#xff0c;从简单的命令行工具到复杂的企业级Web应用程序。 Spring Boot是Spring框架的一个扩展&#xff0c;旨在简化Spri…

使用阿里云试用Elasticsearch学习:2.2 深入搜索——全文搜索

我们已经介绍了搜索结构化数据的简单应用示例&#xff0c;现在来探寻 全文搜索&#xff08;full-text search&#xff09; &#xff1a;怎样在全文字段中搜索到最相关的文档。 全文搜索两个最重要的方面是&#xff1a; 相关性&#xff08;Relevance&#xff09; 它是评价查询…

idea开发 java web 配电室后台管理系统bootstrap框架web结构java编程计算机网页

一、源码特点 java 配电室后台管理系统是一套完善的完整信息系统&#xff0c;结合java web开发和bootstrap UI框架完成本系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主 要采用B/S模式开发。 前段主要技术 cs…

阿里 Arthas 工具使用

Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类加载信…

(delphi11最新学习资料) Object Pascal 学习笔记---第8章第6节(安全类型转换运算符)

8.6 安全类型转换运算符 ​ 正如我们之前所见&#xff0c;子类的语言类型兼容性规则允许你在期望祖先类的地方使用子类。如我所提到的&#xff0c;反向则不可能。 ​ 现在假设TDog类有一个Eat方法&#xff0c;而TAnimal类中不存在此方法。如果变量FMyAnimal引用了一个狗&…

苹果CMSV10整合dplayer播放器增加记忆+P2P播放+自动下一集功能插件详细保姆级教程

1.本站已打包&#xff0c;可以直接下载然后上传到你服务器的苹果CMS网站static/player目录下就可以了&#xff0c;下面是教程 wlm3u8.js代码&#xff1a; MacPlayer.Html <iframe border"0" src"mac<span class"wp_keywordlink"><a hre…

全国航空机场分布矢量数据/旅游景点poi/全国港口码头分布/地铁站分布/火车站分布/POI矢量数据

民用航空机场是指针对包括跑道型机场、表面直升机场、高架直升机场、船上直升机场、直升机水上平台、滑翔机场、水上机场、有人操纵气球施放场以及其他专供民用航空器起降的划定区域。民用航空机场分为通用航空机场和公共运输机场&#xff1b;不包括临时机场和专用机场。 根据中…

SSM项目实战——哈哈音乐(四)前台模块开发

1、项目准备 ①导入依赖和前端资源 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.x…

课时86:流程控制_函数基础_函数退出

2.1.2 函数退出 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 简介 我们可以将函数代码块&#xff0c;看成shell脚本内部的小型脚本&#xff0c;所以说函数代码块也会有执行状态返回值。对于函数来说&#xff0c;它通常支持两种种状态返回…

已解决java.lang.NegativeArraySizeException: 负数组大小异常的正确解决方法,亲测有效!!!

已解决java.lang.NegativeArraySizeException: 负数组大小异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 检查并修正硬编码值 调整计算逻辑 校验变量值 总结 博主v&#xff1a;XiaoMing_Jav…

解决element-plus table组件 fixed=“right“(left)浮动后横向滚动文字穿透的问题

BUG 版本&#xff1a;element-plus 2.6.1 浏览器&#xff1a;360极速浏览器22.1 (Chromium内核) 组件&#xff1a;el-table组件 问题&#xff1a;在头部/尾部浮动加上斑马条纹后&#xff0c;横向滚动存在文字穿透的问题。具体如图&#xff1a; 白色背景行的文字&#xff0c…

反转链表(leetcode 206)

迭代核心逻辑&#xff1a; 原链表的新的下一个结点&#xff0c;作为新反转链表的头结点 代码分析&#xff1a; 初始化prev为nullptr&#xff08;之后是作为反转后链表的最后一个结点&#xff09;&#xff0c; 遍历原链表时保存当前结点的下一个结点&#xff0c;将curr的nex…

蓝桥杯单片机真题实践篇

这里就不完全写思路过程代码什么的&#xff0c;这一篇文章就写我在训练真题中遇到的过程。 &#xff08;呜呜呜&#xff0c;时间不够辣&#xff0c;能做多少算多少吧....&#xff09; 十三届省赛题 问题1&#xff1a;数码管的数字消影不明显 &#xff08;参考&#xff1a;蓝…