【问题标题】:Using JPA, Maven and Tomcat, but getting java.lang.NoClassDefFoundError: javax/persistence/Persistence使用 JPA、Maven 和 Tomcat,但出现 java.lang.NoClassDefFoundError: javax/persistence/Persistence
【发布时间】:2012-07-07 17:47:48
【问题描述】:

但在其他情况下,我尝试将这些依赖项放到 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>

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

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

问候, 爱德华多

更新

现在我尝试在我的 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>

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

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

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

【问题讨论】:

  • javaee-api 被命名为它只是一个 api 定义,但没有为此提供一个实现。我假设您需要像 Hibernate、EclipseLink 等这样的实现。此外,您将范围定义为“提供”,这意味着它将由 JBoss、Glassfish 等环境提供。
  • 我明白了,我尝试提供一个 Hibernate 实现,但它不起作用。另外,我正在使用 Tomcat,它应该提供一个实现。有谁知道使用 JPA 和 Hibernate 需要哪些依赖项?
  • 你是怎么做到的?你能为此展示pom吗? Tomcat 不提供 JPA 实现,因为它是一个 servlet 引擎而不是 JEE 服务器。
  • 哦,我知道它不是一个完全符合 JEE 的服务器,但我认为它应该有这么多。我使用了上面的 POM。我正在尝试弄清楚如何提供休眠实现。
  • Tomcat 既不是部分 JEE 服务器也不是完整的 JEE,它只是一个简单的 Servlet 容器 (tomcat.apache.org/tomcat-7.0-doc/index.html)。如果您尝试使用休眠,我在 pom 中看不到您发布的任何休眠依赖项。对不起,没有那个我无能为力。

标签: java tomcat maven jpa


【解决方案1】:

终于可以解决问题了。这是 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>

【讨论】:

  • 我遇到了和你一样的问题。我得到完全相同的错误。我复制了你的 pom.xml 文件,但它对我不起作用。在以下链接stackoverflow.com/questions/13584269/… 中,我发布了一些关于我的项目的信息。谁能给个提示?
猜你喜欢
  • 2018-05-07
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 2020-05-28
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多