报LinkageError的原因(1)

java.lang.LinkageError: loader constraint violation Maven项目在加入servlet.api和jsp.api后报如下的错误 严重: Servlet.service() for servlet jsp threw exception java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoad... 阅读详情

LinkageError是一个比较棘手的异常,准确的说它是一个Error而不是Exception。java api对它没有直接的解释,而是介绍了它的子类:

    Subclasses of LinkageError indicate that a class has some dependency on another class; however, the latter class has incompatibly changed after the compilation of the former class.

似乎是说不兼容性,既编译时,A类用到B类,且这时候A和B是兼容的,但是到运行时,A类得到的B(既某个类加载器加载的B类)却不是A在编译的时候那个与之兼容的B,这个说起来比较复杂,其实就是个二进制兼容性问题,和很多程序不能在98上跑是一个道理,程序就是A,而98就是B。
事实上,真正出现二进制兼容性问题的时候,确实是报NoSuchMethodError或者NoSuchFieldError或者NoClassDefFoundError。Java api对NoSuchMethodError的解释(其他的解释几乎相同):
Thrown if an application tries to call a specified method of a class (either static or instance), and that class no longer has a definition of that method.
Normally, this error is caught by the compiler; this error can only occur at run time if the definition of a class has incompatibly changed.
 
关键词是“incompatibly changed ”。
 
事实证明,当传统意义上的二进制不兼容性(既上面举的98的例子,或者说incompatibly changed)问题发生的时候,java会报NoSuchMethodError,NoSuchFieldError或者NoClassDefFoundError,这三个类都是LinkageError的子类,所以,就好像java api对LinkageError中的解释一样“Subclasses of LinkageError indicate that……”这个解释并没有说LinkageError本身应该是在什么情况下被抛出。倒不是java api顾左右而言他,而是抛出LinkageError的情况实在是很难叙述,《深入java虚拟机》第二版用近乎一章(比较大的一章,和其它章相比)来解释这个问题。归根结底,原因是ClassLoader没有完全按照设计的那样设置:任何一个ClassLoader的实例都应该设置一个恰当的ClassLoader实例为父类加载器,并且在真正defineClass前,都应该先将这个任务委托给其父类加载器。何为恰当的ClassLoader实例?一般来说,就应该是 this.getClass().getClassLoader()(也就是ClassName.class.getClassLoader(),这两个值是同一个值)的返回值),或者是一个设计者认为合理的值。这个值应该保证“相同全限定名的类(可以认为是同一个类,仅仅是可以)不会出现在同一个类的代码中。”举例来说,在一个类的一段代码中(可以是一个方法,或者是一个static块),如果有classLoaderA加载的 test.Test类,也有classLoaderB加载的test.Test,那么,把前者的引用指向后者的实例的时候,就会报LinkageError。
LinkageError解决办法.md 立即下载

相关推荐

别再死记硬背了!用‘小乌龟’实战图解ROS1核心指令(rosnode/rostopic/rosparam保姆级手册)

本文通过经典的turtlesim乌龟仿真器,以可视化实战方式讲解ROS1核心指令(rosnode/rostopic/rosparam),帮助初学者摆脱死记硬背,在操控乌龟的过程中轻松掌握节点管理、话题通信和参数设置等ROS1核心概念。

weixin_28731223的博客 371

深入理解java.lang.LinkageError

LinkageError是Java编程中的一个重要错误类型,它表示在类加载或链接过程中发生了问题。它可能导致程序无法正常运行或出现不可预料的错误。LinkageError的原因包括版本不兼容、类或方法不存在、类加载器问题等。解决方法包括检查依赖关系和版本兼容性、检查类加载器的使用方式等。

博客 4666

关于海康网络摄像头使用VLC或者Opencv拉流有延迟的问题

先说结论,我用VLC或者Pyhton opencv直接拉取海康网络摄像头的rtsp流,会有1-2s延时,特别明显。环境:Windows + VLC / Openc-Python。如上面文章介绍,我使用的时候遇到一处错误,需要把代码中的。海康SDK:与网页视频相比,几乎是同步的。上面说的延时,也是与摄像头网页视频相比的。ffplay 去掉缓存:延时1s左右。这两处地方改成左斜杠,才能运行。opencv拉流使用的是。多线程:延时1s左右。

yljxh的博客 4500

错误: 加载主类 时出现 LinkageError 解决办法

Error:No valid exports main found for 解决办法 在导入本地项目,运行的时候,发生了Error:No valid exports main found for 的错误,搜索了很多种方法,都没有办法解决,后来,自己试验修改了一下,最终解决了这个问题。 我发生这个错误的原因是:编译工具的设置中选择了一种版本的java,而项目设置的是另一种java,将两者修改为一个版本的java,就可以解决了。 编译工具(IDEA) IDEA:File->Settings Projec

啊哈呀的博客 3万+

深入解析MOS管电容特性:从基础理论到高频应用

本文深入解析了MOS管的电容特性,从基础物理结构出发,详细拆解了栅氧电容、重叠电容和结电容的成因与影响。文章重点探讨了电容值随工作状态变化的非线性特性,并分析了其在CMOS高频开关电源、射频电路等应用中的关键作用,包括开关损耗、米勒效应、信号完整性挑战以及如何将电容特性转化为可控元件(如MOS变容管)的机遇。最后提供了从选型、仿真到PCB布局的实战设计指南。

weixin_29278805的博客 382

Unity半透明物体景深失效?教你用双材质球方案完美解决(附完整Shader代码)

本文深入剖析了Unity中半透明物体导致景深效果失效的根本原因,即半透明物体默认不写入摄像机深度图。针对此问题,文章详细介绍了稳定高效的“双材质球”解决方案,通过为物体附加一个仅写入深度信息的不可见材质,完美修复景深效果,并提供了完整的Shader代码与实现脚本。

weixin_29010003的博客 382

已解决java.lang.LinkageError: 链接错误的正确解决方法,亲测有效!!!

已解决java.lang.LinkageError: 链接错误的正确解决方法,亲测有效!!!

小明的Java问道之路 2375

Skyworks SKY85331-11的Wi-Fi 6 (802.11ax)标准 2.4G 高功率WLAN前端模块解决方案

SKY85331-11是高度集成的2 GHz前端模块(FEM)包含2 GHz单刀双掷(SPDT)发送/接收(T / R)开关,2 GHz低噪声放大器(LNA)带旁路和一个2 GHz功率放大器(PA),用于大功率802.11ax应用程序和系统LNA和PA禁用功能可确保低漏电流 关闭模式。 包括一个集成的功率检测器以提供系统内的闭环功率控制。该设备提供Small (24-pin, 3 x 5 mm) (LGA)封装。 图1.引脚配置和封装如图所示 图2.信号引脚分配和功能引脚描述 图...

zhangbao19890622的博客 4507

Java异常

1. 了解异常的结构体系和分类(Error和Exception) Java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。Throwable又派生出Error类和Exception类。 错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。 异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理

Java小菜鸟 425

74.9008深度刷机原理|高通QPST/Firehose底层刷写协议详解

移动设备刷机与底层维修技术指南 本文为移动设备维修人员和高级玩家提供全面的刷机与底层维修技术指南,涵盖高通、联发科和苹果A系列芯片的主要操作。 主要内容 核心操作:Bootloader解锁、Fastboot刷写、EDL深度修复、iTunes DFU模式恢复和分区表重建 适用场景:系统故障修复、底层损坏恢复、安全限制解除、系统降级和深度硬件维修 关键技术:详细解析刷机协议栈层级、关键分区作用和刷机安全机制 操作步骤: 环境搭建与驱动安装 Bootloader解锁(以小米为例) 高通机型系统刷写 苹果设备DFU

2601_95651806的博客 205

【STK】手把手教你利用STK进行导弹和反导仿真02 - STK/MMT模块01 导弹任务分析工具概述

种工具:导弹设计工具(Missile Design Tool,MDT )、导弹飞行工具(Missile Flight Tool,截弹,或者用内置拦截弹编辑器创建的个性化的拦截弹, IFT 能够对 ―一对一 ‖动能拦截。导设置系统参数, 并对其有效性进行验证, 画性能图,保证该设计是可行的。(SAIC)公司联合开发研制,极大扩展了 STK 原有的导弹对象的功能,能够精确仿真。IFT 能够对拦截飞机、 导弹、卫星等目标进行仿真和分析。(2)推进系统参数,包括推力,比冲,秒流量,推力持续时间,喷嘴出口面积,

weixin_44184852的博客 1877

java.lang.LinkageError: 链接错误的正确解决方法,亲测有效,嘿嘿,有效

va.lang.LinkageError` 是 Java 虚拟机在尝试链接类定义时发生的错误。这类错误通常是由于类定义的不一致性问题导致的,比如类定义在加载过程中被修改,或者两个类加载器加载了同一个类的不同版本。以下是针对 `LinkageError` 的详细分析、报错原因、解决思路和代码示例。

PythonAigc的博客 3100

国科大学习资料--自然语言处理(宗成庆)-2019期末考试题

国科大学习资料–自然语言处理(宗成庆)-2019期末考试题 国科大学习资料–自然语言处理(宗成庆)-2019期末考试题 国科大学习资料–自然语言处理(宗成庆)-2019期末考试题

无名何许人的博客 2438

1、加载主类时出现 LinkageError

加载主类 com.itheima.hello.HelloWorld 时出现 LinkageError原因:项目jdk版本与IDEA的jdk版本不一致解决方法:点击左下角扳手按钮设置项目jdk的版本再进入Project Structure查看idea的jdk版本。将两个jdk版本设置成相同的即可解决。...

飞翔的企鹅的博客 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java LinkageError类

LinkageError源码重点 LinkageError是一个Error,继承自Error类表示不可恢复异常,LinkageError的子类表示一个类对另一个类有依赖关系,且父类在编译子类之后发生了不兼容的变化时(父类发生了变化),会抛出该错误Error LinkageError源码 package java.lang; /** * Subclasses of {@code LinkageError} indicate that a class has * some dependency on an

weixin_45754452的博客 1206

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Cursor(VsCode)运行Java24代码报LinkageError和UnsupportedClassVersionError解决

openjdk 网站声称,由于 JDK 23 中的预览功能根据反馈进行了更改或删除,因此 JDK 24 支持这些功能的成本很高。类文件版本 67.65535 代表 Java 23 预览版(enable-preview),其中主版本 67 代表 Java 23,次版本 65535 代表预览功能。实践来看,新版本插件还是不能很好地支持新版本Java 24,官方应该会升级解决,以上几种workaroud的方式也能工作。此错误的一个可能根本原因是您的运行时 JDK 是最新的 ,但VsCode的。

炎黄的专栏 1581

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

异常java.lang.LinkageError: loader constraints violated when linking

SA 的BOSS系统有后台任务,系统使用Javamail将客户的下月账单发送到客户邮箱中,升级系统后发现后台有报错 java.lang.LinkageError: loader constraints violated when linking

Keep learing, and stay fast 1316

java.lang.LinkageError异常,jar包冲突

问题点描述: 之前使用eclipse开发的web项目,现在使用IntelliJ IDEA。于是就将eclipse里的一个web项目导入到了Idea中变成了一个maven项目。等一切都配置好之后启动Tomcat,然后开始运行程序,爆出以下Error java.lang.LinkageError: loader constraint violation: when resolving method "org.apache.jasper.runtime.InstanceManagerFactory.get

weixin_41188227的博客 3779

Java.lang.LinkageError

【转】http://blog.youkuaiyun.com/zhangspring1234/article/details/8841295 1.linkage Error  Java.lang.LinkageError: loader constraint violation: when resolving interface method异常 javax.servlet.Ser

kino浩的博客 1451

Unity Android构建LinkageError:Java环境与SDK兼容性解决方案

在移动应用开发中,Java环境配置与Android SDK工具链的兼容性是构建流程的关键基础。Java版本不匹配会导致类加载失败,引发LinkageError等运行时异常,直接影响项目打包与部署效率。对于Unity开发者而言,Android平台构建依赖特定的Java运行时环境(JRE/JDK)与SDK工具版本协同工作。当Unity调用Android构建工具(如sdkmanager)时,版本冲突会中断APK生成流程。本文聚焦Unity Android开发中常见的构建错误,通过系统化排查Java环境、SDK工具

weixin_34392435的博客 521

关于java.lang.LinkageError

启动tomcat(6.0.28)访问项目主页出现异常: java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFa...

三里小龙 712

java.lang.LinkageError: loader constraint violation: loader 问题解决方案

** java.lang.LinkageError: loader constraint violation: loader 问题解决方案 ** java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tom...

weixin_43148411的博客 6182

使用relocation解决包冲突导致的java.lang.LinkageError: loader constraint violation

自行编码jar后报错,看网上类似问题都是jar冲突,解决一般就是删除冲突的jar包对比正常版本和这次编译的版本发现pom.xml缺少了relocations相关内容。relocations是将制定目录的class移动到一个新的目录下面,从而避免冲突。 原来的包名 新的包名 .........

shy_snow的专栏 1832
上一篇: 关于java数组的深度思考
下一篇: 为什么Java不支持创建范型数组?
DeepNightTwo
博客等级 码龄21年 3粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值