maven项目多版本互不兼容依赖冲突解决办法
记录一次maven多module工程的依赖冲突和解决办法
项目架构
- maven工程树形结构
|---parent
|---moduleA
|---moduleB
|---moduleC
- 工程描述
- 项目是单体项目
- moduleA和moduleB被moduleC引用
- 项目最终是在moduleC中打包成jar文件
冲突描述
- moduleA中引入了
selenium-chrome-driver,而selenium依赖高版本的guava - moduleC中引入了
apache curator,curator依赖的是低版本的guava,且moduleC引入了moduleA - 冲突是谷歌的
guava包有两个版本,且高低版本互不兼容
冲突解决
- 新建一个maven项目或者module(不用继承父module),不选择原型创建
- 将其中一个依赖抽离出来,我这里选择抽离
selenium - 抽离原则是项目中使用到的api更少,api使用更集中抽离谁(我这里是抽离
selenium,因为我使用到的seleniumapi都封装在一个类里) - 删除其它不需要的目录比如test和resource目录,只留下java目录和pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
org.xiaog
chromewebdriver
1.0-SNAPSHOT
8
8
org.seleniumhq.selenium
selenium-chrome-driver
3.141.59
org.apache.maven.plugins
maven-shade-plugin
3.1.1
false
package
shade
com.google.guava
org.xiaog.guava
com.google.common
org.xiaog.google-common
- pom.xml中引入
selenium,并使用了maven-shade-plugin插件 maven-shade-plugin是核心,它能修改依赖的包名,以及将依赖下载到jar中,这样就可以使用两个不同版本的guava包了,
因为我将com.google.guava改成了org.xiaog.guava了- java目录中可以不放代码,也可以放使用到依赖的代码
- 然后maven install