在现在的开发过程中,难免会碰到项目上线,而项目上线分为:增量升级和全量升级。增量升级就是只升级变化的内容,而全量升级就是整个项目打包上传升级。
在这次升级的过程中,小编还是根据之前的操作将要升级的内容编译打包,然后上传到服务器,重启,等待下班,而往往现实跟自己的想法存在点偏差,服务器启动日志里面突然报出了个NoSuchMethodException,我一看,我...当时整个心情就不好了,第一反应就是,是谁没提交变更集?谁把原方法改了还是删了?当然今天在这里写这个肯定不是这么简单的问题了。
解决过程:
1,查看服务器日志,看该异常产生的位置;
2,去代码中找是否存在该方法;(存在)
3,将增量包中的.class文件反编译,看是否编译出问题了;(存在)
4,到这里小编就有点慌了,这测试环境是没问题的啊?为什么生产环境就报了这个问题了呢?于是就想到把生产报错的.class文件和测试环境的该文件反编译进行对比下,果然发现了问题所在。
首先,报错的这个文件是没有在本次增量包升级中的,因为该类不再此次升级范围内,也就没在乎了;
然后,在和生产环境代码对比后发现该类的带参构造方法中的参数类型是发生了改变了的,而在我们需要升级的增量包中是有new该类的对象的,所以在测试环境编译,new该类调用的是最新的该类带参构造,而生产的带参构造是不一样;因此报出NoSuchMethodException 这个异常。
最后,解决该问题:1,要么连带将该类一块升级;(这个得确认连带升级是否会影响到其他的内容)2,将该类的和生产的保持一致,然后再次重新编译报错的类,重新上传,重启服务器,搞定,收工!