SpringCloud中导入依赖minio8.3.5和okhttp4.9.0依赖,启动时报错:
An attempt was made to call a method that does not exist. The attempt was made from the following location:
io.minio.S3Base.<clinit>(S3Base.java:105)
The following method did not exist: okhttp3.RequestBody.create([BLokhttp3/MediaType;)Lokhttp3/RequestBody;
.........
Action:
Correct the classpath of your application so that it contains a single, compatible version of okhttp3.RequestBody
场景:微服务cloud-common-oss
模块中,导入了依赖minio8.3.5,okhttp4.9.0
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.3.5</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.9.0</version>
</dependency>
minio中本身封装了okhttp依赖,但版本不合适,于是添加<exclusions>
将其封装的okttp排除。并添加4.9.0版本的okhttp依赖。
在微服务cloud-app-park
中调用了cloud-common-oss
的minioService相关接口,启动cloud-app-park
时一直报okhttp依赖冲突。
先检查cloud-common-oss
中pom.xml以及其父pom是否存在okhttp的冲突版本,
可查看pom.xml的依赖图
Ctrl+鼠标上翻键放大依赖关系图;Ctrl+F搜索依赖名称。可以看到只存在一个okhttp4.9.0版本。
但确保cloud-common-oss
中只有一个okhttp4.9.0版本后,启动cloud-app-park
时,还是报冲突问题:
打开cloud-app-park
模块的依赖关系图发现,该图中显示cloud-common-oss
的okhttp还是3.14.4版本的。
解决:在cloud-app-park
的pom.xml中引入依赖okhttp.4.9.0版本:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.0</version>
</dependency>
注意:当cloud-common-oss
的pom.xml文件发生改变,其模块需要执行一下clean
,compile
,install
。并且引入该模块的的模块也要执行clean
,compile
命令。
mvn clean
mvn compile
mvn install
另一种依赖版本管理方法解决:
父pom.xml:
<properties>
<minio.version>8.3.5</minio.version>
<okhttp.version>4.9.0</okhttp.version>
</properties>
<!-- 依赖声明 -->
<dependencyManagement>
<dependencies>
...
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>${minio.version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>${okhttp.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
cloud-common-oss
的pom.xml:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<exclusions>
<exclusion>
<artifactId>okhttp</artifactId>
<groupId>com.squareup.okhttp3</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</dependency>