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

这篇具有很好参考价值的文章主要介绍了springboot引入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应该没有冲突了。

springboot minio okhttp,java,okhttp,kotlin,minio,maven

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

springboot minio okhttp,java,okhttp,kotlin,minio,maven

解决办法

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中指定的,解决办法就是先排除这个依赖,再单独添加依赖并指定版本。

springboot minio okhttp,java,okhttp,kotlin,minio,maven

参考资料

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

2. 记录Maven 依赖包版本号奇奇怪怪的问题 - okhttp3、okio 版本指定无效_okio maven-CSDN博客文章来源地址https://www.toymoban.com/news/detail-858209.html

到了这里,关于springboot引入minio导致的okhttp、kotlin的版本冲突问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 串口和鼠标冲突,导致鼠标异常问题

            工业电脑上使用串口设备通讯时,发现鼠标移动异常(不受控制),原因是Windows将串口设备误认为鼠标,电脑串口在启动时但串口软件还没启动,串口数据大量的涌向PC,导致PC通过“sermouse.sys”将串口识别为USB驱动从而与USB触摸驱动冲突使得的鼠标移动异常(不受

    2024年02月11日
    浏览(32)
  • Elasticsearch:解决并发写入导致版本冲突异常version_conflict_engine_exception

         数据同步中,在使用阿里云Elasticsearch7.10.0版本的集群作为目标数据源时,在连续写入同一文档(document)出现版本冲突问题。 注意:以下所述均以阿里云7.10.0版本的Elasticsearch集群为前提(不同版本可能会稍有不同)       以生产环境的错误日志信息为例: ElasticsearchSta

    2024年02月08日
    浏览(32)
  • 并发冲突导致流量放大的线上问题解决

    事故现象 生产环境,转账相关请求失败量暴增。 直接原因 现网多个重试请求同时到达 svr,导致内存数据库大量返回时间戳冲突。业务方收到时间戳冲突,自动进行业务重试,服务内部也存在重试,导致流量放大。 转账 首先我们一起了解一下转账。转账请求在支付场景中的

    2024年02月13日
    浏览(29)
  • 【现网】记一次并发冲突导致流量放大的生产问题

    目录 事故现象 转账 业务背景介绍 背景一:转账流程 转账流程 转账异常处理 转账异常处理流程图 背景二:账户系统合并 实际全流程: 背景三:扣内存数据库逻辑 背景四:调用方重试逻辑 问题定位 总结  资料获取方法 生产环境,转账相关请求失败量暴增。 直接原因 现网

    2024年02月14日
    浏览(35)
  • 【问题处理】GIT合并解决冲突后,导致其他人代码遗失的排查

    📕作者简介:战斧,从事金融IT行业,有着多年一线开发、架构经验;爱好广泛,乐于分享,致力于创作更多高质量内容 📗本文收录于 GIT 专栏,有需要者,可直接订阅专栏实时获取更新 📘高质量专栏 云原生、RabbitMQ、Spring全家桶 等仍在更新,欢迎指导 📙Zookeeper Redis ka

    2024年02月08日
    浏览(42)
  • ip地址冲突导致ping时通时断显示超时问题处理过程

    目录 1 现象     2 Ping的过程:    3 可能的原因: 4 排查过程 类似问题:ip冲突问题解决和复现过程_wj31932的博客-CSDN博客 无法上网故障排查过程及复现过程系ip冲突造成_wj31932的博客-CSDN博客_arp获取不到网关mac地址        一天,同事反馈他的pc出现ping外网时通时断,一会

    2024年01月21日
    浏览(35)
  • 解决 node 版本冲突问题

    问题描述:有多个VUE项目,它们要求的开发环境node版本不一致,个别不支持当前node版本号的项目没办法启动 解决方案:使用NVM在本地安装多个node,在启动项目的时候,切换到对应的node版本 下载nvm,根据提示,正常下一步即可。 官方下载地址:https://github.com/coreybutler/nvm-

    2024年02月09日
    浏览(26)
  • 插件版本冲突问题记录

    1.使用 --legacy-peer-deps 参数: 运行命令时使用 --legacy-peer-deps 参数,可能会避免一些版本冲突。 2.安装最新版本【@latest】的(例如: babel-loader:在确认依赖关系兼容后,重新安装最新版本的 babel-loader)。 3.使用 --force 或 --legacy-peer-deps: 如果你确定解决版本冲突后不会出现其

    2024年02月10日
    浏览(33)
  • Kotlin 中 OkHttp 使用及解析

    1、通过 Builder 模式得到  okHttpClient ,OkHttpClient 包含了对网络请求的全局配置信息,包括 链接超时时间、读写超时时间、链接失败重试 等配置。 2、通过 Builder 模式得到 request ,Request 包含了本次网络请求的所有请求参数,包括 url、method、headers、body 等。 3、通过 newCall 方法

    2024年02月10日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包