Spring Cloud依赖与显式声明的Resilience4j包冲突,如何解决?
Spring Cloud依赖引入的Resilience4j包与显式声明版本冲突的解决方法
已尝试的无效方法
- 添加依赖排除
- 直接导入该库
- 引入BOM
当前pom.xml配置
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.5</version> <relativePath/> </parent> <properties> <spring-cloud.version>2022.0.1</spring-cloud.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependency> <groupId>io.github.resilience4j</groupId> <artifactId>resilience4j-spring-boot3</artifactId> <version>2.2.0</version> </dependency>
启动报错信息
*************************** 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: io.github.resilience4j.spring6.bulkhead.configure.threadpool.ThreadPoolBulkheadConfiguration.createBulkheadRegistry(ThreadPoolBulkheadConfiguration.java:105) The following method did not exist: 'io.github.resilience4j.bulkhead.ThreadPoolBulkheadRegistry io.github.resilience4j.bulkhead.ThreadPoolBulkheadRegistry.of(java.util.Map, io.github.resilience4j.core.registry.RegistryEventConsumer, java.util.Map)' The calling method's class, io.github.resilience4j.spring6.bulkhead.configure.threadpool.ThreadPoolBulkheadConfiguration, was loaded from the following location: jar:file:/.m2/repository/io/github/resilience4j/resilience4j-spring6/2.2.0/resilience4j-spring6-2.2.0.jar!/io/github/resilience4j/spring6/bulkhead/configure/threadpool/ThreadPoolBulkheadConfiguration.class The called method's class, io.github.resilience4j.bulkhead.ThreadPoolBulkheadRegistry, is available from the following locations: jar:file:/.m2/repository/io/github/resilience4j/resilience4j-bulkhead/1.7.0/resilience4j-bulkhead-1.7.0.jar!/io/github/resilience4j/bulkhead/ThreadPoolBulkheadRegistry.class jar:file:/.m2/repository/io/github/resilience4j/resilience4j-bulkhead/2.2.0/resilience4j-bulkhead-2.2.0.jar!/io/github/resilience4j/bulkhead/ThreadPoolBulkheadRegistry.class The called method's class hierarchy was loaded from the following locations: io.github.resilience4j.bulkhead.ThreadPoolBulkheadRegistry: file:/.m2/repository/io/github/resilience4j/resilience4j-bulkhead/1.7.0/resilience4j-bulkhead-1.7.0.jar Action: Correct the classpath of your application so that it contains compatible versions of the classes io.github.resilience4j.spring6.bulkhead.configure.threadpool.ThreadPoolBulkheadConfiguration and io.github.resilience4j.bulkhead.ThreadPoolBulkheadRegistry
核心原因
显式引入的resilience4j-spring-boot3:2.2.0依赖2.2.0版本的resilience4j-bulkhead,但Spring Cloud 2022.0.1默认引入的是1.7.0版本的resilience4j-bulkhead,类加载时优先加载了旧版本,而旧版本中不存在新版本依赖的方法,导致启动失败。
解决方法
方法1:通过BOM统一Resilience4j版本
在dependencyManagement块中引入Resilience4j的BOM,强制所有相关依赖使用指定版本:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- 引入Resilience4j BOM统一版本 --> <dependency> <groupId>io.github.resilience4j</groupId> <artifactId>resilience4j-bom</artifactId> <version>2.2.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
之后将resilience4j-spring-boot3依赖的版本号移除,由BOM统一管理:
<dependency> <groupId>io.github.resilience4j</groupId> <artifactId>resilience4j-spring-boot3</artifactId> </dependency>
方法2:排除Spring Cloud中的旧版本Resilience4j
在Spring Cloud的依赖管理配置中排除所有Resilience4j相关依赖,确保仅加载显式声明的版本:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> <exclusions> <exclusion> <groupId>io.github.resilience4j</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </dependencyManagement>
方法3:使用Spring Cloud兼容的Resilience4j版本
替换显式声明的版本为Spring Cloud 2022.0.1兼容的1.7.x版本:
<dependency> <groupId>io.github.resilience4j</groupId> <artifactId>resilience4j-spring-boot3</artifactId> <version>1.7.2</version> </dependency>
验证方式
执行mvn dependency:tree命令,检查所有Resilience4j相关依赖的版本是否统一,确认无1.7.0和2.2.0版本共存的情况。
内容的提问来源于stack exchange,提问作者Janani Sampath Kumar
相关产品推荐
相关产品推荐

