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

项目场景:

      SA 的BOSS系统有后台任务,系统使用SpringTask + Javamail实现将客户的下月账单发送到客户邮箱中,升级系统后发现后台有报错

java.lang.LinkageError: loader constraints violated when linking


 

原因分析:

        LinkageError异常准确的说他是一个错误, 因为他是 Error类的子类,Java API对Error的描述,只有LinkageError的解释:

 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.

        大概意思为,ERROR 的子类LinkageError的异常提示发生一个类对另一个类具有某种依赖关系, 但是依赖的类在编译后发生了不兼容的改变,例如编译时候A类依赖B类,到运行时,A类得到的B类(既某个类加载器加载的B类)却发现B类已经变成了不兼容的类,无法满足依赖关系

       通过异常日志发现问题 出现在javamail的MimeMessageHelper#addAttachment方法中,查看代码发现是可能是 javax.activation.DataHandler引起, 此类位于activation-1.1.jar 包中

      最后考虑到会不会是JBOSS环境中第三方包影响,因此核实第三方包,发现BOSS中使用的第3方包activation.jar和activation-1.1.jar冲突。两个包冲突引起依赖问题


解决方案:

        activation-1.1.jar是解决一个业务需求时增加,核实代码此业务需求activation.jar完全可用,删除activation-1.1.jar后问题解决

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
java.lang.LinkageErrorloader constraint violation: when resolving method解释为加载器约束错误:在解析方法时。 当Java虚拟机(JVM)在运行时尝试加载类和解析类中的方法时,可能会遇到该错误。这通常发生在以下情况下: 1. 类型冲突:加载器尝试使用两个不同的类加载器加载具有相同名称但不同版本的类,从而导致了方法的冲突。因此,使用了不兼容的类定义。 2. 类重定义:加载器尝试重新定义已经在虚拟机中加载的类,从而导致加载的重复。这可能会导致类的冲突以及方法无法解析。 解决这个问题的方法如下: 1. 检查类加载器:确定是否有多个类加载器同时加载了相同的类。如果是,请确保只有一个类加载器加载相应的类。 2. 更新依赖关系:检查项目的依赖关系,确保所有的依赖项都是最新的版本并且兼容。 3. 清除类缓存:如果问题仍然存在,可以尝试清除JVM的类缓存。可以通过删除临时目录中的所有缓存文件来实现(例如,Java.io.tmpdir系统属性指向的目录)。 4. 更新JVM:确保使用的JVM是最新版本。有时,这种错误可能是由于JVM本身的问题引起的,而在较新的版本中可能已经修复。 总之,加载器约束错误是由于类加载器冲突或类重定义导致的,解决方法包括检查类加载器、更新依赖关系、清除类缓存以及更新JVM版本等。根据具体情况选择适当的解决方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

=PNZ=BeijingL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值