使用hibernate-validator时出现NoClassDefFoundError

时间:2013-02-14 13:06:27

标签: java maven hibernate-validator

我有一个mavenized项目,我使用JSR 303(Bean验证)。作为参考实现,我使用Hibernate-validator。在项目中我指定了依赖:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>4.1.0.Final</version>
    <scope>provided</scope>
</dependency>

使用4.1.0版本一切正常。但是当我把它改成4.2.0时。我在这一行上遇到运行时错误:

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
  

java.lang.ClassFormatError:方法中的Absent Code属性   在类文件javax / persistence / Persistence

中不是native或abstract      

...... //更多堆栈跟踪

     

java.lang.NoClassDefFoundError:无法初始化类   com.andr.myproject.services.utils.ValidationUtils

哪里有问题?

UPD:我也使用Java-ee-5依赖,而不是6.

UPD2:JUnit测试中出现此错误

3 个答案:

答案 0 :(得分:1)

您的项目中是否碰巧有以下依赖项:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
</dependency>

如果是这样,你应该确保将它从运行时类路径中排除,因为这个JAR只能用于编译而不能用于运行时(它的类被修改,所以它们不包含方法实现)。您可以使用JBoss提供的API JAR:

<dependency>
    <groupId>org.jboss.spec</groupId>
    <artifactId>jboss-javaee-6.0</artifactId>
    <version>1.0.0.Final</version>
    <type>pom</type>
    <scope>provided</scope>
</dependency>

可能添加Hibernate Core有帮助,因为它在单独的JAR中引入了JPA API。您可以找到更多信息here

答案 1 :(得分:0)

确保maven实际上从回购中获取了jar,使用它并且在那个Jar中提到了所提到的类。

答案 2 :(得分:0)

我找到了解决方案:

我需要添加hibernate-core依赖项。没有它就行不通。

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.0.1.Final</version>
    </dependency>