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

Spring项目添加REST API后AppInitializer依赖报错,求POM解决方法

问题分析与解决方案

核心问题

你的POM存在版本不兼容+API包冲突:

  1. Spring组件版本分裂:spring-context、spring-web用了6.0.9(依赖Jakarta EE栈),但spring-webmvc用了5.3.4(依赖Java EE栈),两个版本依赖的Servlet API完全不同(Spring 6用jakarta.servlet.*,Spring 5用javax.servlet.*),导致类加载时找不到jakarta.servlet相关类。
  2. 同时引入javax.servlet-api和jakarta.servlet-api,两种API包共存引发类路径混乱。
  3. Hibernate 5.x依赖Java EE的JPA API,和Spring 6的Jakarta JPA不兼容。

修正方案

1. 统一Spring版本,切换到完整的Spring 6栈

将所有Spring组件版本统一为6.0.9,Spring 6要求Java 17+,你的Java 18符合要求。

2. 替换所有javax依赖为Jakarta版本

Servlet、JSP、JSTL都要换成Jakarta EE对应的包,移除旧的javax依赖。

3. 升级Hibernate到兼容Jakarta的版本

Hibernate 6.x支持Jakarta EE,替换原有的Hibernate 5.x依赖。

修正后的POM配置

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>templateGestionale</groupId>
    <artifactId>templateGestionale</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <!-- 统一版本管理 -->
    <properties>
        <spring.version>6.0.9</spring.version>
        <hibernate.version>6.2.2.Final</hibernate.version>
        <jakarta.servlet.version>6.0.0</jakarta.servlet.version>
        <java.version>18</java.version>
    </properties>

    <dependencies>
        <!-- Spring 6 核心组件 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- Spring ORM(整合Hibernate) -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- MySQL驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.24</version>
        </dependency>
        <!-- Oracle驱动 -->
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>18.3.0.0</version>
        </dependency>

        <!-- Hibernate 6(兼容Jakarta EE) -->
        <dependency>
            <groupId>org.hibernate.orm</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <!-- Jakarta Servlet API -->
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>${jakarta.servlet.version}</version>
            <scope>provided</scope>
        </dependency>
        <!-- Jakarta JSP API -->
        <dependency>
            <groupId>jakarta.servlet.jsp</groupId>
            <artifactId>jakarta.servlet.jsp-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- Jakarta JSTL -->
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>jakarta.servlet.jsp.jstl</artifactId>
            <version>2.0.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.1</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.11.0</version> <!-- 升级插件支持Java 18 -->
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

代码调整说明

你的AppInitializer和WebAppConfig代码无需修改,修正POM后,Spring 6版本会自动使用Jakarta Servlet API,类找不到的问题会消失。

额外注意事项

  • 确保Web容器版本支持Jakarta EE 9+:Tomcat 10+支持Jakarta EE 9,Tomcat 9及以下仅支持Java EE(javax),如果使用Tomcat 9,建议降级到Spring 5.x全栈。
  • 若坚持用Spring 5.x,需将所有Spring组件版本统一为5.3.x,移除jakarta依赖、保留javax版本,同时Java版本降至16及以下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:24:57