添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

最近和某第三方平台技术对接时, 由于对方的 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 , 对于不用的, 可排除之.

展开阅读全文