Spring Boot 项目导入 aliyun oss starter 依赖后启动报错的解决方案
Posted 庸人冲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot 项目导入 aliyun oss starter 依赖后启动报错的解决方案相关的知识,希望对你有一定的参考价值。
描述
参考 官方文档 进行环境搭建:
版本信息:
- spring boot: 2.6.6
- spring cloud:2021.0.1
- spring cloud alibaba:2021.0.1.0
- aliyun-spring-boot-dependencies:1.0.0
公共项目 gulimall-common 中引入 aliyun oss starter :
<dependencies>
<!--省略其它依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>aliyun-oss-spring-boot-starter</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>aliyun-spring-boot-dependencies</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
其它项目 gulimall-product 中引入 gulimall-common:
<dependencies>
<dependency>
<groupId>com.yrc.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
启动 gulimall-product 项目,错误内容如下:
2022-04-10 11:13:31.081 WARN 22884 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'aliCloudEdasSdk' defined in class path resource [com/alibaba/cloud/spring/boot/context/autoconfigure/EdasContextAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.cloud.context.edas.AliCloudEdasSdk]: Factory method 'aliCloudEdasSdk' threw exception; nested exception is java.lang.NoSuchMethodError: com.aliyuncs.profile.DefaultProfile.getHttpClientConfig()Lcom/aliyuncs/http/HttpClientConfig;
2022-04-10 11:13:31.085 INFO 22884 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2022-04-10 11:13:31.095 INFO 22884 --- [ main] ConditionEvaluationReportLoggingListener :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2022-04-10 11:13:31.116 ERROR 22884 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
An attempt was made to call a method that does not exist. The attempt was made from the following location:
com.alibaba.cloud.context.AliCloudSdk.<init>(AliCloudSdk.java:76)
The following method did not exist:
com.aliyuncs.profile.DefaultProfile.getHttpClientConfig()Lcom/aliyuncs/http/HttpClientConfig;
The calling method's class, com.alibaba.cloud.context.AliCloudSdk, was loaded from the following location:
jar:file:/D:/maven/respository/com/alibaba/cloud/alicloud-context/1.0.5/alicloud-context-1.0.5.jar!/com/alibaba/cloud/context/AliCloudSdk.class
The called method's class, com.aliyuncs.profile.DefaultProfile, is available from the following locations:
jar:file:/D:/maven/respository/com/aliyun/aliyun-java-sdk-core/3.4.0/aliyun-java-sdk-core-3.4.0.jar!/com/aliyuncs/profile/DefaultProfile.class
The called method's class hierarchy was loaded from the following locations:
com.aliyuncs.profile.DefaultProfile: file:/D:/maven/respository/com/aliyun/aliyun-java-sdk-core/3.4.0/aliyun-java-sdk-core-3.4.0.jar
Action:
Correct the classpath of your application so that it contains compatible versions of the classes com.alibaba.cloud.context.AliCloudSdk and com.aliyuncs.profile.DefaultProfile
2022-04-10 11:13:31.117 WARN 22884 --- [ Thread-16] c.a.n.common.http.HttpClientBeanHolder : [HttpClientBeanHolder] Start destroying common HttpClient
2022-04-10 11:13:31.118 WARN 22884 --- [ Thread-16] c.a.n.common.http.HttpClientBeanHolder : [HttpClientBeanHolder] Destruction of the end
Process finished with exit code 1
原因
gulimall-common 项目中:
aliyun-oss-spring-boot-starter
默认引入的aliyun-java-sdk-core
是 3.4.0 版本- 但是
aliyun-spring-boot-dependencies
中对aliyun-java-sdk-core
版本管理为:4.5.0
gulimall-product 引用了 gulimall-common 的依赖,但是没有引入 aliyun-spring-boot-dependencies
依赖管理,所以两个项目的 aliyun-java-sdk-core
版本不一致,就会会导致项目 gulimall-product 启动失败:
解决方法
在公共项目 gulimall-common 中排除 aliyun-oss-spring-boot-starter
默认的 aliyun-java-sdk-core
,单独引入 4.5.0 版本的 aliyun-java-sdk-core
:
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>aliyun-oss-spring-boot-starter</artifactId>
<exclusions>
<!--排除默认版本的依赖-->
<exclusion>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<!--引入4.5.0 版本依赖-->
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.0</version>
</dependency>
</dependencies>
再次启动项目成功:
以上是关于Spring Boot 项目导入 aliyun oss starter 依赖后启动报错的解决方案的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 项目导入 aliyun oss starter 依赖后启动报错的解决方案
完美解决导入aliyun-oss-spring-boot-starter导入依赖报错
spring cloud导入一个新的spring boot项目作为spring cloud的一个子模块微服务,怎么做/或者 每次导入一个新的spring boot项目,IDEA不识别子module(代