应用场景
应用依赖了某个客户端的Jar包,其依赖1.0版本的Jar包X。按照Maven的依赖仲裁原则,如果存在更短的依赖路径或者依赖路径相同,依赖声明靠前,都会影响客户端依赖的X包的版本,需要通过某种方式能够让客户端依赖的X包不受应用的影响。
解决方案
方案一:scope为provided
说明:使用maven对客户端打包时,将scope改为provided,由应用提供依赖的X包。这种方案要求X包的不同版本能够兼容。
方案二:更改包名
说明:使用maven-shade-plugin插件,将客户端依赖的X包名更改为其它名称;
方案三:使用类加载器隔离
说明:首先使用maven-shade-plugin插件,将X打包到客户端的Jar包中,然后使用类加载机制加载指定的类;
maven-shade-plugin介绍
功能:生成某个jar包时,能够将其依赖的其它jar包同时打包进来形成一个jar包,且能够更改其依赖的jar包名称。
This plugin provides the capability to package the artifact in an uber-jar, including its dependencies and to shade - i.e. rename - the packages of some of the dependencies.
详情参考:https://maven.apache.org/plugins/maven-shade-plugin/