解决Idea查看源代码警告Library source does not match the bytecode for class XXX问题

 更新时间:2024年10月06日 15:39:44   作者:笔墨桑  
在使用IDEA开发时,遇到第三方jar包中的源代码和字节码不一致的问题,会导致无法正确打断点进行调试,这通常是因为jar包更新后源代码没有同步更新造成的,解决方法是删除旧的jar包,通过Maven重新下载或手动下载最新的源代码包,确保IDE中的源码与字节码版本一致

背景

执行代码的时候抛出异常,想在第三方jar文件中打断点分析问题原因,进入该文件后IDEA给出警告

翻译过来就是资源库的源代码与类的字节码不匹配,当前我们在UpgraderManager.java中,右侧有一个Open.class file按钮,点击之后就会跳转到UpgradeManager.class中,点击show diff或者对比这两个文件可以看到是不一样的。

这个问题影响还是挺大的,具体的现象就是程序真正运行的代码行数,与我们看到的代码行数不一致,也就没法打断点分析程序的走向

分析

我们在使用第三方jar时,用的是编译好的字节码文件,即.class文件,而不是源文件.java。

而.class文件我们是看不懂的,如果我们想在IDE中看第三方源代码,可以通过IDE的插件进行自动反编译,但是一般来说不会有注释,而且参数名也不是原来的参数名,会被反编译成var1, var2, var3等。

当然也可以自己下载源文件后进行配置。

一般来说第三方jar在打包时也会将源文件和class文件一起发布,所以引用这个jar时IDE会自动引用它的源文件,可以通过如下方式进行查看

以IDEA为例,点击File->Project Structure..

在弹出的窗口中选择Library菜单,中间的窗口部分选中包含警告文件的jar,在右侧可以看到Classes字节码,Sources源代码以及JavaDocsjava文档对应的jar

到这里可以分析出,警告的内容就是说xxx.jar中内容与xxx-source.jar中的内容不一致,进入到该文件夹中继续进行查看

虽然jar与source.jar的版本一致,但是修改的日期不一样,也就是说由于某种原因导致了jar与source.jar里边的内容不一致了,使用解压软件进行查看里边的某些文件也会发现,有些代码在source.jar中存在但是在jar中却不存在

解决办法

知道了问题原因,那么就知道怎么解决了。

很简单,将该版本中的所有jar全部删除,重新用maven下载

本例中就需要将xxx.2.1.0这个文件夹全部删除,然后在IDEA中使用maven reload project(旧版本为maven reimport)重新下载该jar,或者自行去maven仓库网站下载亦可。下载之后再查看该文件,就没有警告了,断点就可以继续打了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java编程实现并查集的路径压缩代码详解

    java编程实现并查集的路径压缩代码详解

    这篇文章主要介绍了java编程实现并查集的路径压缩代码详解,具有一定借鉴价值,需要的朋友可以参考。
    2017-11-11
  • Java面试常考之ConcurrentHashMap多线程扩容机制详解

    Java面试常考之ConcurrentHashMap多线程扩容机制详解

    几乎所有的后端技术面试官都要在 ConcurrentHashMap 技术的使用和原理方面对小伙伴们进行刁难,本文主要来和大家聊聊ConcurrentHashMap多线程的扩容机制,希望对大家有所帮助
    2023-05-05
  • MyBatis查询缓存实例详解

    MyBatis查询缓存实例详解

    查询缓存的使用,主要是为了提高查询访问速度。这篇文章主要介绍了MyBatis查询缓存,需要的朋友可以参考下
    2017-06-06
  • Java设计模式之模板方法模式Template Method Pattern详解

    Java设计模式之模板方法模式Template Method Pattern详解

    在我们实际开发中,如果一个方法极其复杂时,如果我们将所有的逻辑写在一个方法中,那维护起来就很困难,要替换某些步骤时都要重新写,这样代码的扩展性就很差,当遇到这种情况就要考虑今天的主角——模板方法模式
    2022-11-11
  • Java开发利器之Guava Cache的使用教程

    Java开发利器之Guava Cache的使用教程

    缓存技术被认为是减轻服务器负载、降低网络拥塞、增强Web可扩展性的有效途径之一。今天咱们就来聊聊Guava Cache本地缓存,感兴趣的可以了解一下
    2022-09-09
  • 浅入浅出的讲解Spring循环依赖问题

    浅入浅出的讲解Spring循环依赖问题

    循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环,下面这篇文章主要给大家介绍了关于Spring循环依赖问题的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-10-10
  • Java concurrency集合之ConcurrentLinkedQueue_动力节点Java学院整理

    Java concurrency集合之ConcurrentLinkedQueue_动力节点Java学院整理

    这篇文章主要介绍了Java concurrency集合之ConcurrentLinkedQueue,需要的朋友可以参考下
    2017-06-06
  • Java包装类与异常处理的过程

    Java包装类与异常处理的过程

    本文介绍了Java中包装类和异常处理的概念,解析了它们的用途和使用方法,包装类主要用于将基本数据类型转换为对象,解决面向对象编程中的限制;异常处理机制则帮助程序优雅地处理运行时错误,包括常见异常类型、异常处理语句及自定义异常的使用
    2026-04-04
  • 详解spring-cloud与netflixEureka整合(注册中心)

    详解spring-cloud与netflixEureka整合(注册中心)

    这篇文章主要介绍了详解spring-cloud与netflixEureka整合(注册中心),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • 如何解决Could not transfer artifact org.springframework.boot问题

    如何解决Could not transfer artifact org.spri

    在Maven更新过程中遇到“Could not transfer artifact org.springframework.boot”错误通常是由于网络问题,解决方法是在Maven的设置中忽略HTTPS,添加特定语句后,可以正常下载依赖,但下载速度可能较慢,这是一种常见的解决方案,希望对遇到相同问题的人有所帮助
    2024-09-09

最新评论