Spring Boot集成Square SDK20.1.0报OkHttpClient NoSuchMethodError
问题根因
抛出的java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.callTimeout属于典型的依赖版本冲突报错,和配置的生产/沙箱环境、access_token参数无关:项目运行时实际加载的OkHttp版本过低,callTimeout(long, TimeUnit)是OkHttp 3.12.0版本才新增的API,低版本OkHttp不存在该方法,Square SDK初始化客户端时调用该方法就会触发错误。
兼容版本说明
Square Java SDK 20.1.0.20220616 官方内置依赖的OkHttp版本为 4.9.3,兼容所有3.12.x及以上的OkHttp 3.x、4.x版本,低于3.12.0的版本均无法正常运行该版本SDK。
解决步骤
- 排查当前生效的OkHttp版本
Maven项目执行命令mvn dependency:tree | grep okhttp3,Gradle项目执行命令./gradlew dependencies | grep okhttp3,查看输出结果确认实际加载的OkHttp版本,该冲突一般是Spring Boot旧版本、其他第三方依赖传递引入低版本OkHttp导致。 - 强制指定全局OkHttp版本为兼容版本
Maven项目在pom.xml的dependencyManagement节点中添加如下配置,锁定版本:
Gradle项目在build.gradle中添加版本强制规则:<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.9.3</version> </dependency>configurations.all { resolutionStrategy.force 'com.squareup.okhttp3:okhttp:4.9.3' } - 若项目中引入了
okhttp-logging-interceptor、okhttp-urlconnection等同属OkHttp生态的依赖,需将这些组件的版本与核心okhttp包版本保持一致,避免其他兼容问题。 - 清理项目构建缓存,重新编译启动后即可正常初始化SquareClient,你提供的客户端初始化代码本身没有逻辑问题。
内容的提问来源于stack exchange,提问作者Umesh Goti
相关产品推荐
相关产品推荐

