在使用maven管理依赖的java项目中,难免会遇到一个项目依赖了三方jar包的不同版本,进而导致了项目无法正常启动。这个时候就需要解决这些冲突,使得程序正常运行。下面,我来提供下我的解决方案(依赖 intelliJ idea)。
一、依赖是通过maven进行管理,且不同版本不需要并存:
1、根据程序运行日志确定报错是来自依赖冲突并确定依赖的三方的groupId和artifactId。之后按着如图1->2->3的步骤,打开某个模块的jar包依赖树。
2、在依赖图中,按ctrl+f根据artifactId进行搜索,来确认项目具体引入了同groupId和artifactId的哪几个版本:
3、从下图可以看出joda-time里面出现了两个版本,一个为2.9,一个为2.8.2。之后双击进而确定通过哪个依赖引入了这个依赖,进而通过exlusions标签进行排除。
二、产生依赖的两个版本需要并存,或者另一个是内置在某个三方依赖中。
1、例如com.google.guava guava在16版本和18版本中就没有做到兼容。但项目中依赖的phoenix-client内置了com.google.guava guava的16版本。这个时候可以使用maven-shade-plugin进行解决。
2、新建一个phoenix-client项目,里面仅依赖phoenix-client,之后在项目的pom文件的build标签里面增加一个plugin的配置,如图:
3、之后执行maven的package命令,生成使用com.shade.google.guava的phoenix-client版本,并将jar包上传到自己的maven私服,并将之前项目依赖的phoenix-client的版本修改掉即可。