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

Tomcat10运行Jersey3+Hibernate项目报ValidatorFactory类未找到错误

问题根因
  • Jersey 3.0.3属于Jakarta EE 9+版本生态,所有Java EE规范包命名已经从javax.*迁移到了jakarta.*,如果项目依赖的Hibernate版本较旧,仍然在使用javax.validation相关API,两者包命名不兼容会导致类加载失败。
  • Tomcat 10.0也是基于Jakarta EE 9规范实现,本身默认不提供javax.validation的实现包,若项目未显式引入对应依赖,运行时就会抛出类不存在的异常。
  • JDK 8本身没有内置Bean Validation的API包,需要额外引入相关依赖。
解决方案

提供两种适配思路,可根据项目实际情况选择:

方案一:适配新规范(推荐,兼容现有Jersey 3.x + Tomcat 10环境)

  • 升级Hibernate到支持Jakarta EE的版本,选择Hibernate ORM 5.6+、Hibernate Validator 7.0+即可,这部分版本已经把API包名迁移到jakarta.validation.*,和Jersey 3.x、Tomcat 10的包命名完全一致。
  • 在pom.xml中显式引入Jakarta Bean Validation的API和实现依赖:
<!-- Jakarta Bean Validation API -->
<dependency>
    <groupId>jakarta.validation</groupId>
    <artifactId>jakarta.validation-api</artifactId>
    <version>3.0.2</version>
</dependency>
<!-- Hibernate Validator 实现 -->
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>7.0.5.Final</version>
</dependency>
<!-- 表达式语言依赖,Bean Validation 运行时必需 -->
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>jakarta.el</artifactId>
    <version>4.0.2</version>
</dependency>
  • 检查persistence.xml等配置文件、Java代码中的导入语句,把所有javax.validation相关的导入替换为jakarta.validation。

方案二:降级环境适配旧规范

如果暂时不想升级Hibernate版本,可降级运行环境适配旧的Java EE规范:

  • 把Jersey版本降级到2.x系列(比如2.41),2.x版本仍使用javax.*命名规范
  • 把Tomcat版本降级到9.x版本,Tomcat 9是Java EE 8规范的实现,兼容javax.*包名
  • 在pom.xml中显式引入旧版Bean Validation依赖:
<!-- Java Bean Validation API -->
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.1.Final</version>
</dependency>
<!-- Hibernate Validator 旧版本实现 -->
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.2.5.Final</version>
</dependency>
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.el</artifactId>
    <version>3.0.1-b12</version>
</dependency>
验证操作

修改依赖后执行mvn clean package重新打包项目,清理Tomcat的work目录和webapps下的旧部署包后再重新部署,也可以直接检查部署后项目的WEB-INF/lib目录下是否存在对应validation相关jar包,排查依赖冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:45:01