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

Spring Boot项目IntelliJ运行正常,打包成.jar后页面空白

问题分析与解决方案

核心问题定位

从日志和代码对比来看,IDE内运行正常但打包成可执行jar后请求先映射到目标控制器、随即跳转到ErrorController,问题根源集中在jar打包配置错误、启动类逻辑异常、依赖冲突这几个点上。

具体修复方案

1. 修正Tomcat依赖范围

你的pom.xml中spring-boot-starter-tomcat设置了provided范围,这会导致打包jar时不包含内嵌Tomcat依赖,但jar运行必须依赖内嵌容器才能启动:

<!-- 错误配置 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

修改为:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <!-- 移除provided,默认compile范围,打包时自动包含 -->
</dependency>

2. 修复启动类上下文加载逻辑

主类的configure方法错误传入了SpringApplicationBuilder.class,导致Spring无法正确加载应用上下文,应该传入当前主类:

// 错误代码
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return builder.sources(SpringApplicationBuilder.class);
}

替换为:

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return builder.sources(EmailCalendarJavaApplication.class);
}

同时恢复@SpringBootApplication注解,它已包含@Configuration、@EnableAutoConfiguration、@ComponentScan,无需重复声明:

@SpringBootApplication
@EnableScheduling
public class EmailCalendarJavaApplication extends SpringBootServletInitializer {
    // ... 其余代码保留
}

3. 解决Servlet API依赖冲突

Spring Boot 3.x基于Jakarta EE 9规范,你依赖的javax.servlet-api与Jakarta规范不兼容,替换为对应Jakarta版本:

<!-- 移除错误依赖 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
</dependency>
<!-- 添加正确的Jakarta依赖 -->
<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>6.0.0</version>
    <scope>provided</scope>
</dependency>

4. 统一依赖版本管理

所有Spring Boot Starter依赖无需手动指定版本,父依赖spring-boot-starter-parent已统一管控,移除手动添加的版本号避免版本不一致:

<!-- 示例:移除version属性 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- 其他Starter依赖同理 -->

5. 完善打包插件配置

确保spring-boot-maven-plugin包含repackage目标,保证生成可执行jar:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <executable>true</executable>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

验证步骤

  1. 执行mvn clean package重新打包
  2. 用java -jar BeeTasks.jar启动应用
  3. 查看日志是否还存在跳转到ErrorController的情况,同时检查是否出现ResourceHttpRequestHandler处理静态资源的日志

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:49:49