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

Spring Boot单元测试启动失败:Jakarta验证类找不到问题求助

问题

Spring Boot微服务运行单元测试时无法启动,抛出关联错误:

  • java.lang.IllegalStateException: Unable to load cache item
  • 根因1:java.lang.NoClassDefFoundError: jakarta/validation/ValidationException
  • 根因2:java.lang.ClassNotFoundException: jakarta.validation.ValidationException

当前相关Maven依赖:

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.1.Final</version>
</dependency>

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.10.Final</version>
</dependency>

项目中使用了import javax.validation.constraints.NotNull;导入语句,并在字符串属性上添加了@NotNull注解,推测问题出在验证模块。

解决方案

核心原因

你的依赖和Spring Boot版本存在javax/jakarta验证API的版本冲突:

  • 你用的是javax.validation包的API(Java EE规范),但Spring Boot 3.x及以上版本已全面切换到Jakarta EE规范(包名从javax改为jakarta),测试启动时会尝试加载Jakarta版本的类,导致找不到。
  • 如果是Spring Boot 2.x版本,hibernate-validator 6.x搭配validation-api 2.x本是兼容的,但可能存在依赖传递冲突。

分版本处理方案

情况1:使用Spring Boot 3.x及以上版本

  1. 替换所有javax.validation相关依赖为Jakarta版本:
<!-- 替换原validation-api -->
<dependency>
    <groupId>jakarta.validation</groupId>
    <artifactId>jakarta.validation-api</artifactId>
    <version>3.0.2</version>
</dependency>

<!-- 替换原hibernate-validator,使用适配Jakarta的版本 -->
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>8.0.1.Final</version>
</dependency>
  1. 修改代码中的导入语句,把所有javax.validation替换为jakarta.validation:
// 替换前
import javax.validation.constraints.NotNull;

// 替换后
import jakarta.validation.constraints.NotNull;

情况2:使用Spring Boot 2.x版本

  1. 直接删除手动添加的validation-api和hibernate-validator依赖,改用Spring Boot Starter自动管理:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  1. 保持代码中的javax.validation导入不变,Spring Boot会自动引入兼容的validation-api 2.x和hibernate-validator 6.x版本,避免依赖冲突。

额外检查

  • 执行mvn dependency:tree查看依赖树,确认没有同时引入javax.validation和jakarta.validation的包。
  • 如果是单元测试类,确保测试类上的@SpringBootTest等注解配置正确,没有引入额外的冲突依赖。

内容的提问来源于stack exchange,提问作者meniman98

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:45:11