由于考虑到项目后期需要用Flink对接Hive,所以这次项目升级需要将Flink版本由1.10升级到1.11,且保证项目能够平稳的运行。
有人可能觉得框架版本升级很简单,把pom文件对应的版本改一下不就行了!
是的,碰上运气好的时候,也许只需要改一下版本号即可,碰上运气差的,不仅要改版本号,改代码,很有可能遇到一连串的jar包冲突!!
对于jar包冲突问题,方法掌握不当,可能一两天都解决不了,糟心的要命,方法掌握得当,完全可以达到事半功倍的效果。
废话不多说,我们开始说一下怎么快准狠地解决jar包冲突问题!
要解决jar冲突我们需要使用到idea的一个插件Maven Helper(如果没有,自行百度安装)。这个插件的作用主要是帮助我们分析依赖之间的关系。
在对Flink进行版本升级的时候,我遇到了如下的问题
很明显,java.lang.NoSuchMethodError异常,jar包冲突问题,这个怎么解决?
首先,我们分析一下异常:
异常第一行:
这句话明显的意思是,org.apache.commons.cli.Option.builder这个类我找不见。可能的两种情况是:1、这个类的jar包没有被引进来;2、这个类的jar包被引进来的多个版本,之间存在冲突。
知道了问题的所在,接下来,我们就需要找一下,org.apache.commons.cli.Option.builde 的jar包是啥。使用快捷键Ctrl + Shift + N,或者点击
输入org/apache/commons/cli/Option,发现如下图
显然org.apache.commons.cli.Option.builde的jar是commons-cli-1.2.jar
接下来,使用Dependency Analyzer查看commons-cli-1.2.jar存在哪些冲突?
commons-cli-1.2.jar存在两个版本,排除掉1.2的版本即可。至此,jar包冲突被完美解决。
最后总结,其实就是三步:
1.根据异常确定哪个类找不见
2.确定该类所在的jar包
3.利用Dependency Analyzer排除冲突
最后,jar包冲突搞定!!!