使用@EmbeddedKafka时出现NoClassDefFoundError错误求助
这个错误是典型的Scala依赖缺失或版本不兼容导致的,结合你的Spring Boot版本和依赖配置,我整理了几个关键修复步骤:
1. 修复依赖拼写错误
首先注意到你的主依赖里有个笔误:
implementation("org.springframework.kafka:spring-kafak:$springKafkaVersion")
这里spring-kafak应该是spring-kafka(少了字母k),这个错误会导致核心Spring Kafka依赖无法正常引入,先修正这个基础问题。
2. 对齐Spring Kafka与Kafka版本
Spring Boot 2.3.3.RELEASE对应的Spring Kafka版本是2.5.7.RELEASE,这个版本兼容的Kafka Clients版本范围是2.5.0/2.4.1/2.3.1/2.2.2。建议你利用Spring Boot的依赖管理自动对齐版本,避免手动指定版本带来的冲突:
如果你的build.gradle已经引入Spring Boot插件,可以不用手动指定kafkaVersion和springKafkaVersion,让Spring Boot帮你管理:
plugins { id 'org.springframework.boot' version '2.3.3.RELEASE' // 其他插件... } dependencies { // 修正后的Spring Kafka核心依赖 implementation("org.springframework.kafka:spring-kafka") // Confluent版本需与Kafka匹配,6.0.0对应Kafka 2.5.x implementation("io.confluent:kafka-json-serializer:6.0.0") implementation("org.springframework.boot:spring-boot-starter-validation") // Test依赖部分 testImplementation("org.springframework.kafka:spring-kafka-test") testImplementation("org.apache.kafka:kafka_2.13:2.5.0") testImplementation("org.apache.kafka:kafka_2.13:2.5.0:test") testImplementation("org.apache.kafka:kafka-clients:2.5.0:test") }
3. 显式引入Scala标准库
NoClassDefFoundError说明运行时找不到Scala核心类,虽然kafka_2.13依赖了scala-library,但有时Gradle无法自动引入或版本不匹配。你可以显式添加对应版本的Scala标准库Test依赖:
testImplementation("org.scala-lang:scala-library:2.13.3")
这个版本要和kafka_2.13的Scala大版本保持一致(2.13.x)。
4. 清理缓存并重新构建
完成上述修改后,执行以下命令清理Gradle缓存并重新构建,确保依赖正确下载:
./gradlew clean build --refresh-dependencies
验证修复
重新运行测试类,若仍有问题,可通过以下命令检查Test依赖树中的Scala版本是否存在冲突:
./gradlew dependencies --configuration testRuntimeClasspath | grep scala
确保所有Scala相关依赖的版本一致,没有冲突。
内容的提问来源于stack exchange,提问作者Rohit Naik




