【问题标题】:java.lang.NoClassDefFoundError: javax/validation/ParameterNameProviderjava.lang.NoClassDefFoundError: javax/validation/ParameterNameProvider
【发布时间】:2014-08-30 10:10:48
【问题描述】:

我编写了一个小型休眠应用程序并得到以下堆栈跟踪:

org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration
    at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:154)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:312)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1857)
    at com.beingjavaguys.hbn.HibernateUtil.buildSessionFactory(HibernateUtil.java:18)
    at com.beingjavaguys.hbn.HibernateUtil.<clinit>(HibernateUtil.java:10)
    at crud.UserDao.addUser(UserDao.java:12)
    at com.beingjavaguys.hbn.App.main(App.java:53)
Caused by: java.lang.NoClassDefFoundError: javax/validation/ParameterNameProvider
...

我不明白这个错误的原因。

代码:

       Configuration configuration = new Configuration();
        configuration.configure();
        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
                configuration.getProperties()).build();
        return configuration.buildSessionFactory(serviceRegistry); // exception thrown here

我的 pom.xml:

...
<dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.5.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.1.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.common</groupId>
            <artifactId>hibernate-commons-annotations</artifactId>
            <version>4.0.4.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <version>1.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.5.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.0.0.GA</version>
            <scope>provided</scope>
        </dependency>
         ...
     ...

我已阅读相关主题,但我真的不明白如何修复它 - 我不想推出到休眠 4.0 版本。

如何解决?

【问题讨论】:

    标签: java hibernate maven


    【解决方案1】:

    Hibernate Validator 5x 与 validation-api 1.0.x 不兼容

    JPA 2.0 : Exception to use javax.validation.* package in JPA 2.0

    【讨论】:

    • 我们可以使用 Hibernate-validator-4.2.0.Final.jar 和 validation-api-1.1.0.Final.jar 吗?
    • 使用 Hibernate Validator 5.x 时,将 javax.validation 升级到 2.x - 这为我解决了问题。
    • Hibernate-Validator 5.x 使用 validation-api 1.1 从 Hibernate-Validator 6 开始,它使用 validation-api 2.0
    • 顺便说一句,就我而言,将所有 Hibernate Validator 从 v6.x 降级到 v5.x 与 validation-api 1.0.x 配合得很好。感谢您的思考方向!
    【解决方案2】:

    只需删除 javax.validation 依赖项

    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.0.0.GA</version>
    </dependency>
    

    这解决了我的这个特殊问题。

    【讨论】:

      猜你喜欢
      • 2015-12-26
      • 2017-01-11
      • 2013-09-24
      • 1970-01-01
      • 2019-06-17
      • 2012-02-09
      • 2014-04-23
      • 2017-04-02
      相关资源
      最近更新 更多