解决jar包冲突 类重定位

maven-shade-详解附加名字可执行jar包
最近在解决java jar包冲突的时候用到了shade插件 , 于是从官网仔细看了下shade的详细使用 , 翻译总结如下 , 希望能用得到 。
直译为遮盖 , 这可以比较好的形容maven-shade-插件的功能 , 比如 , 打胖jar等
介绍
maven shade 提供把工程的及其依赖打包到一个uber-jar中并能隐藏起来(比如重命名) , shade插件仅仅有一个功能就是创建一个包 。
那什么是uber-jar呢 , uber在德语中是above或over的意思 , 在这里表示是从单一的jar提升到“over-jar” , 即把所有的依赖都定义到一个jar文件里 。
好了 , 现在我们知道shade插件的基本作用了 , 现在从官网给出的几个例子看看实际的应用 。
为uber-jar选择内容
这是官网直译的标题 , 用我们容易理解的就是通过shade插件我们可以为生成的那个jar包选择包含哪些依赖以及排除哪些依赖 。
...org.apache.maven.pluginsmaven-shade-plugin3.0.0packageshadeclassworlds:classworldsjunit:junitjmock:**:xml-apisorg.apache.maven:lib:testslog4j:log4j:jar:...
类重定位(解决jar包冲突)
官网是“ ” , 如果一个uber-jar会被其他项目引用 , uber-jar中依赖的类可能会导致类定位冲突(由于不同版本的jar包引起) , 我们可以通过shade插件来将被隐藏的类重定位以使该类只在该uber-jar中使用 , 这种方式也经常被用来解决jar包冲突问题 。
示例如下:
...org.apache.maven.pluginsmaven-shade-plugin3.0.0packageshadeorg.codehaus.plexus.util>org.shaded.plexus.utilorg.codehaus.plexus.util.xml.Xpp3Domorg.codehaus.plexus.util.xml.pull.*...
上述例子是让org...util包和它的子包移动到 org...util包中 , 而类和其他的一些则保留在原来的中 。
一个解决jar包冲突的例子
代码
附加名字
默认情况下 , 当执行/时候 , 会默认生成两个jar包 , 一个以-结尾 , 这个我们可以配置更改 , 示例如下:
...org.apache.maven.pluginsmaven-shade-plugin3.0.0packageshade>true>myName ...

解决jar包冲突  类重定位

文章插图
则会生成以-结尾的jar包 。
可执行jar包
要创建一个可执行uber-jar包 , 也可以将入口添加进来 , 示例如下:
shade.testshade.test