解决项目版本冲突——maven-shade插件使用

在这样的情况下我们应当如何保证不影响项目原有依赖版本的情况下正常使用三方组件呢?此时可以考虑使用maven-shade-插件
maven-shade-介绍
【解决项目版本冲突——maven-shade插件使用】maven-shade-在maven官方网站中提供的一个插件,官方文档中定义其功能如下:
Thisthetothein an uber-jar,itsand to shade - i.e.- theof some of the .
简单来说就是将依赖的包在阶段一起打入jar包中,以及对依赖的jar包进行重命名从而达到隔离的作用 。这里为了解决上面的问题我们主要使用第二个功能特性,使得相同依赖不同版本达到共存的目的 。
解决问题 1.环境准备
这里用来模拟使用maven-shade-解决项目中不同版本共存问题 。原项目此时使用的是1.1.15版本的
com.alibabafastjson1.1.15
假引入一个三方依赖,该依赖使用1.2.75版本的
com.alibabafastjson1.2.75
2.解决方案
搭建一个新的模块-,专门用于存放1.2.75依赖 。在pom文件中添加1.2.75的依赖,然后添加maven-shade-插件 。-的pom如下
com.skrename-dependencies1.0-SNAPSHOT4.0.0com.alibabafastjson1.2.75org.apache.maven.pluginsmaven-shade-plugin3.2.4packageshade*:*META-INF/*.SFMETA-INF/*.DSAMETA-INF/*.RSAcom.alibaba>shade.com.alibaba
从配置文件中可以看到,由于maven-shade-插件在解决这个问题上其实是通过对依赖进行重命名而达到隔离的目的,所以配置主要是集中在中 。这里将以com.开头的包全部重命名为以.开头 。
3.引入依赖
将-进行打包,打包好之后在原项目中引入-的依赖 。此时在引入-之后,可以在项目下看到该依赖中的包名发生了变化

解决项目版本冲突——maven-shade插件使用

文章插图
此时在代码中调用相关方法,会提示选择所需要包,如下图,此时问题解决,两个版本的可同时使用已经兼容 。
一些需要注意的坑maven-shade-的其他使用
官方配置示例
...org.apache.maven.pluginsmaven-shade-plugin3.2.4packageshadeclassworlds:classworldsjunit:junitjmock:**:xml-apisorg.apache.maven:lib:testslog4j:log4j:jar:...
官方配置示例
...org.apache.maven.pluginsmaven-shade-plugin3.2.4package