使用 JPA、Maven 和 Tomcat,但得到 java.lang.NoClassDefFoundError: javax/persistence/Persistence

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11376247/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 04:49:19  来源:igfitidea点击:

Using JPA, Maven and Tomcat, but getting java.lang.NoClassDefFoundError: javax/persistence/Persistence

javatomcatmavenjpa

提问by eduardohl

But looking at other cases I tried to put these dependencies to Maven:

但是在其他情况下,我尝试将这些依赖项放到 Maven 中:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.21</version>
    </dependency>
</dependencies>

I'm trying to run as directly from Eclipse but I keep getting the error: java.lang.NoClassDefFoundError: javax/persistence/Persistence

我试图直接从 Eclipse 运行,但我不断收到错误消息:java.lang.NoClassDefFoundError: javax/persistence/Persistence

I don't get it because it should be provided by the javaee-api dependency.

我不明白,因为它应该由 javaee-api 依赖项提供。

Regards, Eduardo

问候, 爱德华多

UPDATED

更新

Now I tried to use these in my POM:

现在我尝试在我的 POM 中使用这些:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.1.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-core</artifactId>
        <version>4.1.4.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate.java-persistence</groupId>
        <artifactId>jpa-api</artifactId>
        <version>2.0.Beta-20090815</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.21</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet-api</artifactId>
        <version>7.0.26</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

Once Tomcat wouldn't provide me any of the functionality. But I'm still getting the same error, could it be something related to the dependencies scope? Also, my imports are like:

一旦Tomcat不会为我提供任何功能。但是我仍然遇到同样的错误,这可能与依赖范围有关吗?此外,我的进口是这样的:

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Persistence;

How do I tell my container to use the Hibernate implementation?

如何告诉我的容器使用 Hibernate 实现?

回答by eduardohl

Finally was able to fix the issue. This is the correct POM for Hibernate 4. You should not use hibernate annotations as a dependency starting from 3.5

终于能够解决这个问题。这是 Hibernate 4 的正确 POM。从 3.5 开始,您不应使用 Hibernate 注释作为依赖项

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.1.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-core</artifactId>
        <version>4.1.4.Final</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.21</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-jdk14</artifactId>
        <version>1.5.8</version>
    </dependency>
</dependencies>