最近在公司的项目上安装部署时发现项目启动正常,但是接口一旦被调用时就会出现java.lang.NoClassDefFoundError。
发现在项目依赖的jar包里面这个类确实是存在的,不知道为啥却加载不到。
为了找出根源所在,随即使用了阿里的arthas工具,监听下该项目启动时加载进去的类到底存不存在,监听该服务后调用接口,发现该类确确实实没有被加载进去。
因为公司有完整的安装部署脚本,查看安装日志后发现在该项目启动前后各有一次依赖jar的包复制到项目依赖的指定目录下。
分析日志时发现该jar的版本号是一致的,两个jar包里面都存在NoClassDefFoundError找不到的类,不明白为什么在项目启动之后依赖包被覆盖了会加载不到。
随即查看了下项目启动前后的两个jar包的MD5,发现MD5确实不一样。
然后更改安装脚本为jar包已存在则不覆盖,项目启动后再没出现这个问题。
最后总结:项目启动前后如果依赖的jar包被替换,jar包的MD5不一样会导致接口调用时加载不到所依赖的类。
因为知识匮乏,希望有大佬来帮忙解释下为什么会出现该原因。