编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

很懵圈,记录一次MinIO 使用okhttp版本的问题?

wxchong 2024-09-28 02:25:39 开源技术 226 ℃ 0 评论

背景介绍

在项目中使用的是Spring Boot 2.5.15 ,引入的Minio版本是8.3.0,在项目启动之后报错如下。

很懵X,为什么会出现这样的问题呢?通过POM依赖审查,发现代码中所依赖的okhttp是4.8.1版本,并没有报错中的3.14.9版本。

这就更懵了?为什么会这样子呢?

各种百度之后大部分的解决方案都是说通过POM依赖的方式来解决。如下所示。

<!--文件存储器调用-->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.3.0</version>
    <exclusions>
        <exclusion>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
        </exclusion>
    </exclusions>
</dependency>

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

但是明明分析之后,我们看到的minio的依赖中所依赖的就是okhttp4.8.1,为什么要脱裤子放屁呢?解释是说排除依赖重新依赖然后让框架重新依赖。但是实际上并没有什么卵用。最终的依赖方式变成了如下的样子。当你启动项目的时候还是会报错。

如何解决呢?

找了一圈发现,原来是因为在项目中使用了dependencyManagement依赖管理器,而依赖管理器只会管理依赖,并不会在乎版本的变化。然后在父级项目中我们引入了如下的依赖。

<!-- SpringBoot的依赖配置-->
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-dependencies</artifactId>
       <version>2.5.15</version>
       <type>pom</type>
       <scope>import</scope>
   </dependency>

在这个依赖中我们找到了问题的关键。进入到依赖之后,发现原来dependencies的依赖中,已经依赖了Okhttp的3.14.9版本。这就导致我们在子项目中无论如何引用,这个依赖都会默认被添加进去,只不过不使用的时候,就是一个单纯的依赖罢了。

这里我们又两种方式可以解决,一种是将项目结构调整,将spring-boot-dependencies去除,然后根据需要引入自己的依赖。

第二种也是最直接暴力的方式,就是对spring-boot-dependencies.pom文件进行修改,需要注意,在修改的时候编译器会提示是否要修改,我们选择强制修改就可以了。不过这种修改方式可能会影响到其他项目的依赖。所以慎用。

结论

修改完成之后查看项目依赖会发现依赖已经发生了变化,这个时候就说明我们的修改是生效了,我们就可以放心的使用Minion了。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表