0

我有一个 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:类文件 javax/persistence/Persistence 中非本机或抽象方法中的缺失代码属性

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

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

问题出在哪里?

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

UPD2:此错误发生在 JUnit 测试中

4

2 回答 2

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 会有所帮助,因为它将 JPA API 引入到单独的 JAR 中。您可以在此处找到更多信息。

于 2013-02-14T19:53:22.210 回答
0

我找到了解决方案:

我需要添加休眠核心依赖项。没有它就行不通。

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.0.1.Final</version>
    </dependency>
于 2013-02-14T13:58:54.687 回答