jar包冲突的起因
一般使用eclipse或IDEA等集成开发工具进行项目开发打包的话,很少会出现引入不同版本的同一款jar包,所以在一个项目中出现引入的jar包冲突的现象极少,也比较容易排查。
但是,随着java系统的庞大,往往一套庞大的应用系统会由不同的服务部件组成,而这些服务部件常常会由jar包相互引入的现象,这就为jar包冲突埋下了隐患。当一个部件因要与其他部件进行交互,而产生需要引入其他部件的相关jar包时,如果要引入的部件的jar包很多,一个不好的习惯,就是一些开发就将这些jar一概均引入自己项目的classpath中,而当引入的部件的版本发生不同,就很可能其引入的同一款jar包就出现不同的版本,特别是多个部件均引入的一些公共的工具包时。
jar包冲突一般现象
- 应用的异常日志往往会出现让人摸不着头脑的情况,根据异常日志跟踪源码时,发现不了bug。
- 往往会出现本地调试时是正常的,在环境上部署运行后就出现异常。
- 进行远程debug调试时,跟踪异常代码片段时,出现远程的代码执行与本地的代码或source文件不一致情况,比如debug走到了空白行。
出现这些现象,往往就要考虑是否出现了jar包冲突,不要被异常日志所迷惑。
如何排查
排查jar包冲突要通过以下几个步骤:
- 通过异常日志,确定抛出异常的类所在jar包。
- 检查异常栈中涉及到的类及其方法是否确实存在bug。
- 本地测试问题方法,检查本地执行是否ok。
- 排查自己项目引入的jar包,检查是否存在有冲突的jar包。
eclipse及IDEA等集成开发平台都会有对项目依赖包的管理,