【问题标题】:Hibernate Validator java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.internal.engine.ConfigurationImplHibernate Validator java.lang.NoClassDefFoundError:无法初始化类 org.hibernate.validator.internal.engine.ConfigurationImpl
【发布时间】:2018-04-20 04:18:41
【问题描述】:

我已经阅读了this this,但这并没有帮助...

我正在使用具有以下版本/依赖项的休眠验证器:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.4.1.FINAL</version>
</dependency>
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.el</artifactId>
    <version>3.0.1-b08</version>
</dependency>

我认为我做的一切都是正确的,我的日志(以 verbose:class 作为标志)告诉我:

[从 org.hibernate.validator.internal.engine.ConfigurationImpl 加载 文件:.../hibernate-validator-5.4.1.Final.jar]

[从文件加载 javax.validation.Validation:.../validation-api-1.1.0.Final.jar]

但稍后在运行时,当我使用

Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

我得到了经典错误:

java.lang.NoClassDefFoundError: 无法初始化类 org.hibernate.validator.internal.engine.ConfigurationImpl

我还尝试降级到 hibernate-validator 4.3.1 和 javax.validation-api 1.0.0,但奇怪的是错误仍然保持不变。

我在这个项目中有很多其他依赖项(例如 Spring 等),但据我所知,没有一个使用 hibernate-validator 或 javax 验证 api。 (如果是这样的话,我也会在日志中看到它们,不是吗?)

有什么帮助吗?

【问题讨论】:

    标签: java validation hibernate-validator


    【解决方案1】:

    我怀疑 javax.el 的多个实现。这通常是导致此类问题的原因。

    检查您是否有另一个名称不同的人。

    如果不是这样,在 ConfigurationImpl 构造函数中添加一个检查点并检查失败的原因。

    【讨论】:

    • 就是这样,它进入了HibernateValidator的createGenericConfiguration(BootstrapState state)方法,里面只有return new ConfigurationImpl( state );。但是在它进入构造函数之前失败了,堆栈跟踪没有用......哦,好吧,我想我将不得不在没有 Hibernate Validator 的情况下......
    【解决方案2】:

    试试这样的配置:

    <properties>
    
            <hibernate.version>4.3.11.Final</hibernate.version>
        </properties>
    
        <dependencies> 
            <!-- Hibernate -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>${hibernate.version}</version>
            </dependency>
    
            <!-- jsr303 validation -->
            <dependency>
                <groupId>javax.validation</groupId>
                <artifactId>validation-api</artifactId>
                <version>1.1.0.Final</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>5.1.3.Final</version>
            </dependency>    
    
        </dependencies>
    

    完整的example..

    【讨论】:

      【解决方案3】:

      我在使用 JSR 303 bean 验证时遇到了同样的问题 我在下面添加了两个 jar(以及 validation-api-1.1.0.final.jar 和 hibernate-validator-5.0.1.final.jar),问题得到了解决

      1. 同学-0.8.0.jar 2.jboss-logging-3.1.0.ga.jar

      【讨论】:

        【解决方案4】:

        首先,使用 mvn dependency:tree 检查所有依赖项 - 找到 hibernate-validator 并将下面的一个添加到相应依赖项内的 pom.xml 中 - 如果不需要。

        <exclusion>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
        </exclusion>
        

        【讨论】:

          【解决方案5】:

          在 spring-servelt.xml 中添加这个

           <beans:bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> </beans:bean> 
          

          和下面的罐子

          1. hibernate-validator-6.0.17.Final.jar
          2. validation-api-2.0.1.Final.jar
          3. 同学-1.3.4.jar
          4. jboss-logging-3.3.2.Final.jar

          那么一切都会好起来的。

          乐于助人...

          【讨论】:

            【解决方案6】:

            对我来说,问题在于 Hibernate Validator 依赖于 jboss-logging。 jboss 日志记录不是我的类路径的一部分。 异常并没有告诉我在尝试实例化休眠配置 impl 时类未定义错误是由于在类路径上缺少 jboss 日志记录。

            一旦我将它添加到类路径中,class def not found 错误就消失了。

            【讨论】:

            • 好提示。您还应该注意冲突的依赖关系,例如:jboss-logging 和 jboss-logging-spi
            【解决方案7】:

            我在处理 spring-boot 应用程序时遇到了这个问题。问题是由hibernate-validator 6.0.11 引起的,它似乎对javax validation-api 2.0.1.Final 有错误的依赖。对我来说,解决方案是升级到更高版本的 hibernate-validator。

            更详细:
            我的申请依赖于spring-boot-starter-parent 2.1.18.RELEASEspring-boot-starter-web 包依赖于hibernate-validator 6.0.11,它本身依赖于validation-api-2.0.1.Finalvalidation-api-2.0.1.Final 但是需要更高版本的休眠验证器,导致 ValueExtractorManager NoClassDefFoundError。 将应用程序升级到使用hibernate-validator 6.0.21.Finalspring-boot-starter-parent 2.1.18.RELEASE 后问题已得到解决。

            【讨论】:

              猜你喜欢
              • 2019-04-04
              • 1970-01-01
              • 2012-10-10
              • 2013-08-08
              • 2020-09-27
              • 2012-08-26
              • 2015-10-29
              • 2017-09-12
              相关资源
              最近更新 更多