解决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仓库网站下载亦可。下载之后再查看该文件,就没有警告了,断点就可以继续打了。

总结

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

相关文章

  • 详解springboot项目docker部署实践

    详解springboot项目docker部署实践

    这篇文章主要介绍了详解springboot项目docker部署实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Spring深入探索AOP切面编程

    Spring深入探索AOP切面编程

    Spring是一个广泛应用的框架,SpringAOP则是Spring提供的一个标准易用的aop框架,依托Spring的IOC容器,提供了极强的AOP扩展增强能力,对项目开发提供了极大地便利
    2022-07-07
  • 判断以逗号分隔的字符串中是否包含某个数的实例

    判断以逗号分隔的字符串中是否包含某个数的实例

    下面小编就为大家带来一篇判断以逗号分隔的字符串中是否包含某个数的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • springcloud注册hostname或者ip的那些事

    springcloud注册hostname或者ip的那些事

    Spring cloud是一个基于Spring Boot实现的服务治理工具包,在微服务架构中用于管理和协调服务的。这篇文章主要介绍了springcloud注册hostname或者ip,需要的朋友可以参考下
    2019-11-11
  • Java IO流之原理分类与节点流文件操作详解

    Java IO流之原理分类与节点流文件操作详解

    流(Stream)是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通道,数据源发送的数据经过这个通道到达目的地,按流向区分为输入流和输出流
    2021-10-10
  • 如何修改nacos权重报错问题

    如何修改nacos权重报错问题

    这篇文章主要介绍了如何修改nacos权重报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 使用java实现BBS论坛发送邮件过程详解

    使用java实现BBS论坛发送邮件过程详解

    这篇文章主要介绍了使用java发送邮件过程详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Java项目中防止SQL注入的四种方案总结

    Java项目中防止SQL注入的四种方案总结

    SQL注入是一种代码注入技术,通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,下面我们就来看看如何在项目中防止SQL注入吧
    2023-10-10
  • Spring实战之抽象Bean和子Bean定义与用法示例

    Spring实战之抽象Bean和子Bean定义与用法示例

    这篇文章主要介绍了Spring实战之抽象Bean和子Bean定义与用法,结合实例形式分析了Spring抽象Bean和子Bean相关配置、定义与使用操作技巧,需要的朋友可以参考下
    2019-11-11
  • Spring如何处理表单提交

    Spring如何处理表单提交

    这篇文章主要介绍了Spring如何处理表单提交,帮助大家更好的理解和学习spring框架,感兴趣的朋友可以了解下
    2020-10-10

最新评论