小工具知识网

当前位置: 首页 > 行业知识 > springboot引入minio导致的okhttp、kotlin的版本冲突问题

行业知识

springboot引入minio导致的okhttp、kotlin的版本冲突问题

2026-11-10 17:16:26 来源:互联网转载

问题背景

项目中需要引入minio,添加了如下依赖

         io.minio        minio        8.5.2 

结果运行报错:

Caused by: java.lang.RuntimeException: Unsupported OkHttp library found. Must use okhttp >= 4.8.1at io.minio.S3Base.(S3Base.java:106)... 50 common frames omittedCaused by: java.lang.NoSuchMethodError: kotlin.collections.ArraysKt.copyInto([B[BIII)[Bat okio.Segment.writeTo(Segment.kt:169)at okio.Segment.compact(Segment.kt:152)at okio.Buffer.write(Buffer.kt:1854)at okio.Buffer.read(Buffer.kt:1865)at okio.Buffer.writeAll(Buffer.kt:1655)at okio.Options$Companion.buildTrieRecursive(Options.kt:187)at okio.Options$Companion.buildTrieRecursive(Options.kt:174)at okio.Options$Companion.buildTrieRecursive$default(Options.kt:113)at okio.Options$Companion.of(Options.kt:72)at okhttp3.internal.Util.(Util.kt:72)at okhttp3.RequestBody$Companion.create(RequestBody.kt:145)at okhttp3.RequestBody$Companion.create$default(RequestBody.kt:143)at okhttp3.RequestBody.create(RequestBody.kt)at io.minio.S3Base.(S3Base.java:104)... 50 common frames omitted

解决过程

1. 看到Unsupported OkHttp library found. Must use okhttp >= 4.8.1,以为是之前引入的okhttp的版本太低,于是将 okhttp 升到 4.8.1 ,还是报同样错误

2. 上网查了一下,说需要在minio的依赖中排除okhttp依赖,再引入所需依赖,如下所示

        io.minio        minio        8.5.2                                    okhttp                com.squareup.okhttp3                            com.squareup.okhttp3        okhttp        4.8.1

还是不行。这时仍坚定地以为是okhttp的版本冲突导致的。

3. 继续查呀查,学会看依赖树了。发现此时okhttp应该没有冲突了。

那是什么原因呢?突然,注意到了报错信息中的NoSuchMethodError: kotlin.collections.ArraysKt.copyInto。于是搜索kotlin,发现最终元凶。应该是okhttp中的okio依赖的 kotlin 是1.3.70版本的,而实际依赖的 kotlin 是1.2.71版本的,所以在ArraysKt中找不到copyInto方法。

解决办法

在 minio 的依赖中排除 okhttp 依赖,再单独引入所需的 okhttp 依赖。在引入的 okhttp 的依赖中排除 kotlin  的依赖,再单独引入所需 kotlin 依赖。

    io.minio    minio    8.5.2                        okhttp        com.squareup.okhttp3                com.squareup.okhttp3    okhttp    4.8.1                        kotlin-stdlib            org.jetbrains.kotlin                org.jetbrains.kotlin    kotlin-stdlib    1.3.70

后话 

作为maven白痴,之前遇到依赖冲突的问题都不知从何下手。这次在寻找解决办法的过程中,对maven的了解更加深入了。了解到之前okhttp错误依赖的kotlin版本可能是在spring的 DependencyManagement中指定的,解决办法就是先排除这个依赖,再单独添加依赖并指定版本。

参考资料

1. springboot项目 minio okhttp版本依赖问题_unsupported okhttp library found. must use okhttp -CSDN博客

2. 记录Maven 依赖包版本号奇奇怪怪的问题 - okhttp3、okio 版本指定无效_okio maven-CSDN博客

上一篇:香港云服务器怎么连接宝塔?

下一篇:ftp服务器怎么更换?