我有一个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测试中出现此错误
答案 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>