升级Spring-Kafka与Kafka依赖后JUnit测试报NoClassDefFoundError求助
解决方案:JUnit测试报NoClassDefFoundError: org/apache/kafka/server/config/AbstractKafkaConfig
问题根源
升级spring-kafka/spring-kafka-test到3.3.2、kafka-client/kafka_2.13到3.9.0后出现类缺失问题,核心原因是版本兼容性不匹配:
- Spring Kafka 3.3.x的官方兼容范围为Apache Kafka 3.6.x~3.7.x,直接跳升到3.9.0会导致依赖的内部类结构不匹配
AbstractKafkaConfig属于kafka-server模块,spring-kafka-test在新版本中可能未自动引入对应版本的该模块
可行解决方案
方案1:调整Kafka版本至兼容范围
将kafka-client、kafka_2.13降级到Spring Kafka 3.3.2兼容的版本(比如3.7.1),修改build.gradle中的依赖:
implementation 'org.apache.kafka:kafka-clients:3.7.1' implementation 'org.apache.kafka:kafka_2.13:3.7.1' testImplementation 'org.springframework.kafka:spring-kafka-test:3.3.2'
执行gradle clean test重新运行测试,验证问题是否解决。
方案2:升级Spring Kafka至匹配Kafka 3.9.0的版本
如果需要保留Kafka 3.9.0,需将spring-kafka、spring-kafka-test升级到兼容3.9.0的版本(比如3.4.0+),同时确保和Spring Boot 3.4.1兼容:
implementation 'org.springframework.kafka:spring-kafka:3.4.0' testImplementation 'org.springframework.kafka:spring-kafka-test:3.4.0' implementation 'org.apache.kafka:kafka-clients:3.9.0' implementation 'org.apache.kafka:kafka_2.13:3.9.0'
注:Spring Boot 3.4.x通常兼容Spring Kafka 3.4.x,可通过Spring官方依赖BOM确认版本匹配性。
方案3:显式引入kafka-server依赖
如果不想调整版本,可在testImplementation中直接引入对应版本的kafka-server模块,补充缺失的类:
testImplementation 'org.apache.kafka:kafka-server:3.9.0'
执行gradle clean test重新运行测试,验证类缺失问题是否解决。
验证步骤
- 修改build.gradle配置后,执行
gradle clean清理缓存 - 运行单个失败的测试用例:
gradle test --tests "com.yourpackage.YourTestClass" - 确认测试通过后,执行完整测试:
gradle test
内容的提问来源于stack exchange,提问作者Chetan Revankar
相关产品推荐
相关产品推荐

