JAR包依赖冲突解决方案

小微 科技JAR包依赖冲突解决方案已关闭评论120字数 1888阅读模式
摘要前言使用 maven 管理项目一开始方便,但是随着依赖越来越多就会越来越麻烦。最典型的一个问题即是发生JAR的依赖冲突,如下介绍几种常见的处理办法。统一为高版本号当依赖的两个JAR...

使用 maven 管理项目一开始利便,然而跟着依赖愈来愈多就会愈来愈麻烦。最典型的一个问题即是产生JAR的依赖冲突,如下介绍几种常见的处理方法。

统一为高版本号文章源自微观生活(93wg.com)微观生活-https://93wg.com/11526.html

当依赖的两个JAR包版本发送冲突时,存在两种情况:文章源自微观生活(93wg.com)微观生活-https://93wg.com/11526.html

一种是当高版本兼容低版本JAR包,此时的策略是将低版本的依赖包进级为高版本。具体办法:文章源自微观生活(93wg.com)微观生活-https://93wg.com/11526.html

- 直接修改版本号为高版本号,通过修改vesion文章源自微观生活(93wg.com)微观生活-https://93wg.com/11526.html

- 当依赖的是开源JAR包(冲突JAR是通过传递依赖引入)此时没法显示修改version,可以通过exclusion办法进行排除了,如下排除了spring-boot-starter-web引入的2.9.8的jacskon文章源自微观生活(93wg.com)微观生活-https://93wg.com/11526.html

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </exclusion> </exclusions> <version>2.1.2.RELEASE</version> </dependency>

统一为低版本号文章源自微观生活(93wg.com)微观生活-https://93wg.com/11526.html

进行降版本的操作条件,要确认对于引入高版本JAR的所有功能都不能发生影响。一般情况下,不建议这样操作。文章源自微观生活(93wg.com)微观生活-https://93wg.com/11526.html

怎么找到冲突的JAR文章源自微观生活(93wg.com)微观生活-https://93wg.com/11526.html

上两节介绍了怎么解决冲突,除了了在运行系统中报错日志中辨认到冲突的JAR,还可以应用IDE的maven help插件协助查看文章源自微观生活(93wg.com)微观生活-https://93wg.com/11526.html

点击POM文件,提供Dependency Analyzer的Tab视图查看所有依赖及关系,包含冲突项,无比利便文章源自微观生活(93wg.com)微观生活-https://93wg.com/11526.html

同时,也能够使用命令:

mvn dependency:treemvn dependency:tree > out.txt

导出项目的依赖树内容

使用maven-shade-plugin解决JAR冲突

JAR冲突的根本缘由是类的冲突,即存在两个同全路径名的类,所以如能够修改类的全路径名,即冲突自然解决。为些插件maven-shade-plugin可以协助完成该操作。如下,在引入guava包的工程中

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration><!-- <minimizeJar>true</minimizeJar>--><!-- <artifactSet>--><!-- <excludes>--><!-- <exclude>org.projectlombok:lombok</exclude>--><!-- </excludes>--><!-- </artifactSet>--> <relocations> <relocation> <!--表示将所有com.google.co妹妹on引入包修改为my_guava.co妹妹on--> <pattern>com.google.co妹妹on</pattern> <shadedPattern>my_guava.co妹妹on</shadedPattern> </relocation> </relocations> </configuration> </execution> </executions> </plugin> </plugins> </build>

使用上述插件,终究mvn package出来的JAR包,会一并包括guava的依赖,同时修改所有包名:

使用maven-shade-plugin会默许将所有依赖都打进JAR包(除了依赖使用的scope为provider),可使用artifactSet配置进行排除了,见上文pom注释处,更多配置可参考:

http://www.iigrowing.cn/maven-shade-plugin_ru_men_zhi_nan.html

五、SOFABoot 类隔离

https://zhuanlan.zhihu.com/p/36909393

以上就是微观生活(93wg.com)关于“JAR包依赖冲突解决方案”的详细内容,希望对大家有所帮助!

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/11526.html