利用maven-shade-plugin插件解决不兼容的依赖冲突问题

问题描述

在maven工程中,我们常常遇到底层依赖包的版本冲突问题。如果高版本对低版本兼容,那么我们可以使用maven的exclusions排除掉低版本。但如果版本互不兼容,甚至是不同jar有相同类名的冲突,就比较棘手了。

比如,我在某个java工程中即使用了Hutool的加密工具类,也使用了openfeign的feign接口。而Hutool依赖了bcprov-jdk15to18,openfeign依赖了bcprov-jdk15on,这两者就有类名冲突,比如org.bouncycastle.crypto.engines.SM2Engine的类构造方法不同。此时无论你排除哪个jar,都会导致另一个功能出错。如果你两个jar都依赖,那么在运行时,必有一个功能抛出异常。因为jvm只会加载其中一个类。

利用maven-shade-plugin插件解决不兼容的依赖冲突问题_第1张图片

解决方法

可以使用maven-shade-plugin,重新打一个新的jar包,将bcprov-jdk15to18包名重置,并自动更改Hutool包中对bcprov-jdk15to18包的import路径。

利用maven-shade-plugin插件解决不兼容的依赖冲突问题_第2张图片

创建新工程

创建一个没有代码的空的maven工程lib-hutool,其pom如下:



 4.0.0
 cn.hutool
 lib-hutool
 1.0.0-RELEASE
 lib-hutool

 
 
 cn.hutool
 hutool-all
 5.5.1
 
 
 org.bouncycastle
 bcprov-jdk15to18
 1.66
 
 
 
 
 
 
 org.apache.maven.plugins
 maven-compiler-plugin
 
 1.8
 1.8
 
 
 
 org.apache.maven.plugins
 maven-shade-plugin
 2.4.3
 
 
 package
 
 shade
 
 
 true
 
 
 org.bouncycastle
 shaded.org.bouncycastle
 
 
 
 
 *:*
 
 META-INF/*.SF
 META-INF/*.DSA
 META-INF/*.RSA
 
 
 
 
 
 
 
 
 

执行maven编译mvn package,得到lib-hutool-1.0.0-RELEASE.jar,可以选择上传到maven私服。

更改我的工程依赖

将我的工程中的pom修改如下:













 cn.hutool
 lib-hutool
 1.0.0-RELEASE

你可能感兴趣的:(java,maven)