记录minio、okhttp、kotlin一连环的版本冲突问题

问题背景

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

 <dependency>
        <groupId>io.minio</groupId>
        <artifactId>minio</artifactId>
        <version>8.5.2</version>
 </dependency>

结果运行报错:

Caused by: java.lang.RuntimeException: Unsupported OkHttp library found. Must use okhttp >= 4.8.1
	at io.minio.S3Base.<clinit>(S3Base.java:106)
	... 50 common frames omitted
Caused by: java.lang.NoSuchMethodError: kotlin.collections.ArraysKt.copyInto([B[BIII)[B
	at 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.<clinit>(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.<clinit>(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依赖,再引入所需依赖,如下所示

<dependency>
        <groupId>io.minio</groupId>
        <artifactId>minio</artifactId>
        <version>8.5.2</version>
        <exclusions>
            <exclusion>
                <artifactId>okhttp</artifactId>
                <groupId>com.squareup.okhttp3</groupId>
            </exclusion>
        </exclusions>
</dependency>

<dependency>
        <groupId>com.squareup.okhttp3</groupId>
        <artifactId>okhttp</artifactId>
        <version>4.8.1</version>
</dependency>

还是不行。这时仍坚定地以为是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 依赖。

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.5.2</version>
    <exclusions>
        <exclusion>
            <artifactId>okhttp</artifactId>
        <groupId>com.squareup.okhttp3</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.8.1</version>
    <exclusions>
        <exclusion>
            <artifactId>kotlin-stdlib</artifactId>
            <groupId>org.jetbrains.kotlin</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-stdlib</artifactId>
    <version>1.3.70</version>
</dependency>

后话 

作为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博客

相关推荐

  1. windows中python版本冲突问题之二

    2024-03-29 06:50:05       12 阅读
  2. 记录一个git无法push问题

    2024-03-29 06:50:05       14 阅读
  3. 记一次jar冲突问题

    2024-03-29 06:50:05       43 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-29 06:50:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-29 06:50:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-29 06:50:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-29 06:50:05       18 阅读

热门阅读

  1. 数组合并小程序

    2024-03-29 06:50:05       15 阅读
  2. 【WPF应用21】WPF 中的 TextBox 控件详解与示例

    2024-03-29 06:50:05       17 阅读
  3. Superset二次开发之webpack.config.js 功能模块解读

    2024-03-29 06:50:05       19 阅读
  4. 大语言模型中的强化学习与迁移学习技术

    2024-03-29 06:50:05       16 阅读
  5. PyTorch中nn.ReLU函数说明

    2024-03-29 06:50:05       19 阅读
  6. flutter 打包成web应用后怎么通过url跳转页面

    2024-03-29 06:50:05       18 阅读
  7. Flutter——用户关闭键盘后强制拉起键盘

    2024-03-29 06:50:05       19 阅读
  8. 解决 docker swarm 节点容器无法获取客户端真实IP

    2024-03-29 06:50:05       19 阅读
  9. 基于Redis实现延时任务

    2024-03-29 06:50:05       18 阅读
  10. 如何利用opencv进行图像视角角度变换

    2024-03-29 06:50:05       15 阅读