You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非Spring Boot的Spring Web项目依赖配置报错求助

问题排查与解决方案

核心问题:依赖版本不兼容

你遇到的java.lang.ClassNotFoundException: jakarta.transaction.SystemException本质是Spring 6+(Jakarta EE规范)与Hibernate 5.x(Javax规范)的API不兼容,加上依赖重复、版本过旧导致的类缺失。

具体问题点与修复步骤

  1. Hibernate版本过低,不支持Jakarta EE
    Hibernate 5.x基于javax.*包,而Spring 6、Spring Data JPA 3.x要求依赖jakarta.*规范的库。必须升级Hibernate到6.x版本(完全支持Jakarta EE 9+)。

    • 删除hibernate-entitymanager依赖:Hibernate 5.2之后该模块已合并到hibernate-core中,无需单独引入。
    • 更新hibernate-core到兼容版本,比如6.4.4.Final。
  2. Jakarta Transaction API版本不匹配
    当前jakarta.transaction-api:1.3.3是基于Javax的旧版本,需升级到Jakarta规范的2.0.1版本(与Spring 6、Hibernate 6兼容)。

  3. 重复的Servlet API依赖
    同时引入了jakarta.servlet-api:6.1.0和tomcat-servlet-api:10.0.0-M4,后者是里程碑版本且属于重复依赖,直接删除tomcat-servlet-api。

  4. Lombok版本过旧
    lombok:1.16.22不支持Java 17和Jakarta规范,升级到稳定版如1.18.34。

修正后的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.project</groupId>
    <artifactId>assignment</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- 统一管理依赖版本,避免冲突 -->
        <hibernate.version>6.4.4.Final</hibernate.version>
        <jakarta.transaction.version>2.0.1</jakarta.transaction.version>
        <lombok.version>1.18.34</lombok.version>
    </properties>

    <dependencies>
        <!-- Hibernate核心(已包含EntityManager功能) -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <!-- MySQL驱动 -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.3.0</version>
        </dependency>

        <!-- Jakarta Persistence API -->
        <dependency>
            <groupId>jakarta.persistence</groupId>
            <artifactId>jakarta.persistence-api</artifactId>
            <version>3.2.0</version>
        </dependency>

        <!-- Jakarta Servlet API -->
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.1.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- Jakarta Annotation API -->
        <dependency>
            <groupId>jakarta.annotation</groupId>
            <artifactId>jakarta.annotation-api</artifactId>
            <version>3.0.0</version>
        </dependency>

        <!-- Jakarta Transaction API -->
        <dependency>
            <groupId>jakarta.transaction</groupId>
            <artifactId>jakarta.transaction-api</artifactId>
            <version>${jakarta.transaction.version}</version>
        </dependency>

        <!-- Log4j2核心 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.17.1</version>
        </dependency>

        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- Spring Context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.1.14</version>
        </dependency>

        <!-- Spring Data JPA -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>3.4.2</version>
        </dependency>

        <!-- Spring ORM -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>6.1.14</version>
        </dependency>

        <!-- Spring Web -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>6.1.14</version>
        </dependency>

        <!-- Spring Security -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>6.3.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>6.3.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>6.3.6</version>
        </dependency>
    </dependencies>
</project>

额外注意事项

  • 确保你的Hibernate配置文件(如hibernate.cfg.xml或Spring中的JPA配置)使用jakarta.persistence.*包路径,而非旧的javax.persistence.*。
  • 启动前执行mvn clean install清理旧依赖,避免缓存冲突。

学习途径推荐

  • Spring官方文档:重点看Spring ORM、Spring Data JPA的独立使用章节,了解无Spring Boot时的配置方式。
  • Hibernate官方文档:学习Hibernate 6的Jakarta EE适配细节,掌握核心配置与API变化。
  • Java EE/Jakarta EE基础教程:理解Javax到Jakarta的迁移差异,避免API混淆。
  • 实战项目:从零搭建简单的Spring Web + Hibernate应用,逐步掌握依赖管理与配置流程。

内容的提问来源于stack exchange,提问作者Fibin Frajo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:52:33