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

Java 11环境下Hibernate Validator无法找到提供者求助

Java 11非Spring环境下Hibernate Validator依赖配置解决方案

问题核心原因

你遇到的javax.validation.NoProviderFoundException本质是API包与实现包的命名空间不匹配,同时依赖组合存在冗余或版本兼容问题:

  • Hibernate Validator 8.x属于Jakarta EE 9+生态,依赖的是jakarta.validation命名空间的API,而你的代码中调用的是旧的javax.validation包下的类,两者完全不兼容
  • 之前的依赖组合混用了不同的EL实现(expressly和jakarta.el),导致类路径混乱

正确依赖组合(推荐使用Jakarta命名空间)

以下是Java 11环境下,Hibernate Validator 8.x的最简有效依赖:

<dependency>
    <groupId>jakarta.validation</groupId>
    <artifactId>jakarta.validation-api</artifactId>
    <version>3.0.2</version>
</dependency>
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>8.0.0.Final</version>
</dependency>
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>jakarta.el</artifactId>
    <version>5.0.0</version>
</dependency>
  • jakarta.validation-api:Jakarta Validation 3.0规范API,是Hibernate Validator 8.x的依赖基础
  • hibernate-validator:Bean Validation的参考实现
  • org.glassfish:jakarta.el:Hibernate Validator需要的EL表达式实现,用于处理断言、消息插值等逻辑

代码修正

必须将代码中所有javax.validation相关的导入替换为jakarta.validation,示例代码如下:

import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory;

// 初始化Validator工厂与实例
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
Validator VALIDATOR = validatorFactory.getValidator();

// 执行对象验证
Set<ConstraintViolation<T>> constraintViolations = VALIDATOR.validate(object);

备选方案(兼容旧javax命名空间)

如果因历史原因必须使用旧的javax.validation API,可以降级Hibernate Validator到7.x(对应Bean Validation 2.0),依赖组合如下:

<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>7.0.5.Final</version>
</dependency>
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.el</artifactId>
    <version>3.0.1-b11</version>
</dependency>

此方案下,原代码的javax.validation导入无需修改,但不推荐长期使用,Jakarta命名空间是Java EE的官方演进方向。

验证步骤

  1. 执行mvn clean install清理并重新构建项目,确保依赖完全更新
  2. 检查项目编译级别设置为Java 11
  3. 通过mvn dependency:tree排查是否存在javax.validation-api旧版本(2.x及以下)的依赖冲突,如有需排除冲突依赖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:55:22