You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级spring-kafka-test至2.4.13.RELEASE时EmbeddedKafkaBroker报错

解决spring-kafka-test升级后LogAccessor类找不到的问题

问题背景

之前使用spring-kafka-test 2.1.4.RELEASE搭配KafkaEmbedded组件,升级spring-kafka-test到2.4.13.RELEASE时,迁移至EmbeddedKafkaBroker并使用@EmbeddedKafka注解,出现如下错误:

java.lang.NoClassDefFoundError: org/springframework/core/log/LogAccessor 
  at org.springframework.kafka.test.EmbeddedKafkaBroker.<clinit>(EmbeddedKafkaBroker.java:92)
  at org.springframework.kafka.test.context.EmbeddedKafkaContextCustomizer.customizeContext(EmbeddedKafkaContextCustomizer.java:71)
  at org.springframework.boot.test.context.SpringBootContextLoader$ContextCustomizerAdapter.initialize(SpringBootContextLoader.java:336)
  at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:626)
  at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:366)
  at org.springframework.boot.SpringApplication.run(SpringApplication.java:325)
  at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:138)
  at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)
  at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:117)
  at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:107)
  at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
  at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
  at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:242)
  at org.springframework.test.context.testng.AbstractTestNGSpringContextTests.springTestContextPrepareTestInstance(AbstractTestNGSpringContextTests.java:145)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
  at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:510)
  at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:211)
  at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)
  at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:170)
  at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:104)
  at org.testng.TestRunner.privateRun(TestRunner.java:774)
  at org.testng.TestRunner.run(TestRunner.java:624)
  at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
  at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
  at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
  at org.testng.SuiteRunner.run(SuiteRunner.java:261)
  at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
  at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
  at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215)
  at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
  at org.testng.TestNG.run(TestNG.java:1048)
  at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
  at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)
 
Caused by: java.lang.ClassNotFoundException: org.springframework.core.log.LogAccessor
  at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
  37 more

当前环境:spring-boot-starter-parent 2.0.0.RELEASE,spring-kafka 2.1.4.RELEASE,已尝试过不同版本的spring-kafka-test。

错误原因

  • org.springframework.core.log.LogAccessor是Spring Core 5.1及以上版本才新增的类,而spring-boot-starter-parent 2.0.0.RELEASE对应的Spring Core版本为5.0.x,版本不匹配导致找不到该类。
  • spring-kafka与spring-kafka-test版本不一致(2.1.4 vs 2.4.13),进一步加剧了依赖兼容性问题。

解决方案

方案一:统一升级Spring Boot与Kafka相关依赖(推荐)

将Spring Boot版本升级至与spring-kafka-test 2.4.13.RELEASE兼容的版本,同时同步升级spring-kafka版本,保证依赖版本一致:

  1. 修改pom.xml中的父依赖版本为2.2.x(spring-kafka 2.4.x对应Spring Boot 2.2.x官方适配):
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.13.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
  2. 同步调整spring-kafka与spring-kafka-test版本一致:
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
        <version>2.4.13.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka-test</artifactId>
        <version>2.4.13.RELEASE</version>
        <scope>test</scope>
    </dependency>
    
  3. 验证@EmbeddedKafka与EmbeddedKafkaBroker的使用,此时Spring Core版本已升级至5.2.x,包含LogAccessor类,可解决错误。

方案二:降低spring-kafka-test版本适配现有Spring Boot

如果无法升级Spring Boot,需将spring-kafka-test版本降至与spring-boot-starter-parent 2.0.0.RELEASE及spring-kafka 2.1.4.RELEASE兼容的2.1.x系列,但此版本仍使用KafkaEmbedded而非EmbeddedKafkaBroker:

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka-test</artifactId>
    <version>2.1.4.RELEASE</version>
    <scope>test</scope>
</dependency>

注意:此方案无法使用EmbeddedKafkaBroker,若必须使用该组件,只能选择方案一升级Spring Boot。

内容的提问来源于stack exchange,提问作者Charles Antony Raja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:55:21