用SpringBoot排除自动装配某个class来解决jar包冲突

本篇内容主要讲解“用SpringBoot排除自动装配某个class来解决jar包冲突”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“用SpringBoot排除自动装配某个class来解决jar包冲突”吧!

最近和某第三方平台技术对接时, 由于对方的 restful api 还不完善, 于是*选择了sdk方式.  

果然, 在使用SpringBoot集成sdk时, 遇上了让人头疼的jar包冲突.

对方的核心jar包依赖了gson-2.2.4.jar, 与SpringBoot自己所依赖的高版本gson发生冲突, 导致SpringBoot在低版本的gson下启动失败:

Caused by: java.lang.NoSuchMethodError: com.google.gson.GsonBuilder.setLenient()Lcom/google/gson/GsonBuilder;

开始解决冲突...

首先, 在pom下排除了第三方公司依赖的gson-2.2.4.jar, SpringBoot可以正常启动了. 但是, 对方sdk在高版本的gson下也无法运行:

Caused by: java.lang.ClassNotFoundException: com.google.gson.JsonObject;

于是, 又想着去降低SpringBoot的版本, 进而降低其依赖的gson版本, 最后发现最老的SpringBoot1.4所依赖的gson都达到了2.7,  此路不通. 

此时, 好像只能联系第三方公司了, 让对方把gson升级一下然后重新打jar包发过来.

待定... 

期间一直纳闷一个问题: “springboot默认使用jackson的json库, 为什么启动时还要用gson?”

最后, 经人点拨, 得以解惑: springboot确实没用gson, 但是启动时会自动装配它, 以备用.

如果你不用, 可以通过exclude排除自动装配, 如下方式: 

@SpringBootApplication(exclude = {GsonAutoConfiguration.class})

SpringBoot启动时装配了很多类, 详见spring-boot-autoconfigure-2.x.x.RELEASE.jar , 对于不用的, 可排除之. 

到此,相信大家对“用SpringBoot排除自动装配某个class来解决jar包冲突”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!