【问题标题】:java.lang.NoClassDefFoundError: javax/persistence/TableGeneratorsjava.lang.NoClassDefFoundError: javax/persistence/TableGenerators
【发布时间】:2020-05-28 01:19:47
【问题描述】:

我正在尝试将使用休眠 JPA 的后端应用程序开发到 Tomcat 中。 从现在开始,它在 JPA 功能的测试中运行良好,并且没有 JPA 服务的第一个版本现在正在运行(文件上传、下载和这些东西)。

现在我正在集成 JPA 以应用我们需要的所有功能,但是,即使所有测试工作正常(包括服务测试),当我将 Postman 的请求提交给本地服务器。

这是个例外:

javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: javax/persistence/TableGenerators

这是我的 pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.itvcvr</groupId>
  <artifactId>RESTfullApp</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>RESTfullApp Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.activation/activation -->
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-catalina -->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-catalina</artifactId>
        <version>8.5.20</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jdbc -->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-jdbc</artifactId>
        <version>9.0.30</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-juli</artifactId>
            </exclusion>
        </exclusions>
    </dependency>


    <!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.1.1</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-server -->
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>2.29</version>
        <exclusions>
            <exclusion>
                <groupId>org.glassfish.hk2.external</groupId>
                <artifactId>jakarta.inject</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.containers/jersey-container-servlet -->
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.29</version>
         <exclusions>
            <exclusion>
                <groupId>org.glassfish.hk2.external</groupId>
                <artifactId>jakarta.inject</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.containers/jersey-container-servlet-core -->
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>2.29</version>
        <exclusions>
            <exclusion>
                <groupId>org.glassfish.hk2.external</groupId>
                <artifactId>jakarta.inject</artifactId>
            </exclusion>
        </exclusions>
    </dependency>


    <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-multipart -->
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>2.29.1</version>
        <exclusions>
            <exclusion>
                <groupId>org.glassfish.jersey.core</groupId>
                <artifactId>jersey-common</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.inject/jersey-hk2 -->
    <dependency>
        <groupId>org.glassfish.jersey.inject</groupId>
        <artifactId>jersey-hk2</artifactId>
        <version>2.29.1</version>
        <exclusions>
            <exclusion>
                <groupId>org.glassfish.jersey.core</groupId>
                <artifactId>jersey-common</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.javassist</groupId>
                <artifactId>javassist</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.persistence/javax.persistence-api -->
    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>javax.persistence-api</artifactId>
        <version>2.2</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.tomee/javaee-api -->
    <dependency>
        <groupId>org.apache.tomee</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>


    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.16</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa-2.1-api -->
    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <version>1.0.0.Final</version>
    </dependency>



    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.4.3.Final</version>
        <exclusions>
            <exclusion>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
            </exclusion>
            <exclusion>
                <groupId>net.bytebuddy</groupId>
                <artifactId>byte-buddy</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.4.10.Final</version>
        <exclusions>
            <exclusion>
                <groupId>javax.xml.bind</groupId>
                <artifactId>jaxb-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>



  </dependencies>
  <build>
    <finalName>RESTfullApp</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>1.4.1</version>
                <configuration>
                    <rules><dependencyConvergence/></rules>
                </configuration>
            </plugin>
    </plugins>
  </build>
</project>

并且在Entity Manager的生成过程中触发异常

em = Persistence.createEntityManagerFactory("testDb").createEntityManager();

JDBC 驱动程序也在 eEntity Manager 实例之前注册

try {
        Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

我还使用插件强制检查是否有任何依赖项在我的 pom.xml 中创建任何版本不兼容。

这是我必须从 0 开始配置的第一个项目,这个问题是我解决问题的最后一个资源。

谢谢大家:D

【问题讨论】:

    标签: java spring hibernate maven tomcat


    【解决方案1】:

    在大多数情况下,此错误表示类加载器找不到您的代码所依赖的类。

    在您的情况下,名为 javax/persistence/TableGenerators 的类应该在类路径中,但由于某些原因它不是。

    TableGenerators 类封装在 javax.persistence-api-2.2.jar 文件中。

    在 tomacat 上部署 .war 文件之前,检查类路径中是否需要 jar - 进入 RESTfullApp.war 文件并查看 WEB-INF/lib 文件夹,javax.persistence -api-2.2.jar 必须存在,否则请修复您的 Maven 构建以实现此目的。

    更新

    还值得一提的是,Tomcat 中已展开的 .war 文件夹 ($CATALINA_BASE/webapps/RESTfullApp) 必须具有相同的布局并包含您在其中看到的相同文件集 你的 .war 档案,检查 javax.persistence-api-2.2.jar 也在那里。

    如果提到的 .jar 存在于类路径中,我还建议您检查 javax.persistence-api-2.2.jar 是否损坏。

    有时,maven 下载损坏的 .jar 档案可能会导致您看到的错误。 至少,你可以尝试解压这个jar文件,看看解压这个jar的时候会不会出错。

    【讨论】:

    • 现在,当我将项目导出到 .war 文件中时,它包含 javax.persistence-api-2.2.jar。我实际上并没有尝试在服务器上执行它,而是在本地执行它。这可能是Tomcat 9.0和Windows之间的问题吗?不幸的是,我还不能将我的操作系统切换到 unix 发行版。我在我的 pom.xml 中再次添加了特定的库,但仍然无法在本地工作。同样的错误。
    • @KevinLopez 您是否尝试从 Eclispe 或其他 IDE 运行您的应用程序?
    • 我从 Eclipse 运行它。我懒惰地尝试将 projecto 导入 InteliJ Idea,但我遇到了一些库问题,所以我无法尝试从该 ide 运行 int。有什么想法吗?
    • .jar 文件似乎是正确的。解压 javax.persistence-api-2.2.jar 后,我会检查 TableGenerator.class 是否在里面。我将尝试将 .war 文件测试到具有正确安装的 tomcat 的虚拟机中(就像我在实时服务器中的那样)并测试它是否有效。
    • 也可能是文件权限问题,请检查您的tomcat实例在对javax.persistence-api-2.2.jar具有读取/执行权限的用户下运行
    【解决方案2】:

    坏消息...我要显示的当前配置在服务器中正常工作。这可能意味着我遇到的问题来自 Tomcatn 和 Windows 之间的问题。现在测试返回一个 404 代码(代码的 catch 退出),但现在一切都是关于在服务中工作并在发布服务之前进行一些测试。无论如何,感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 2011-02-20
      • 2017-04-02
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      • 2012-07-07
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多