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

Spring Boot 3.0正式版WAR包独立启动失败问题求助

解决方案

1. 调整Tomcat嵌入Jasper依赖的打包配置

Spring Boot 3.0正式版后,Tomcat嵌入JSP的类加载逻辑有变动,命令行运行WAR包时易出现zip文件提前关闭的异常。可通过修改构建配置,确保JSP相关依赖和资源被正确处理:

Maven配置

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <war>
                    <packagingExcludes>WEB-INF/lib/tomcat-embed-*.jar</packagingExcludes>
                </war>
                <excludes>
                    <exclude>
                        <groupId>org.apache.tomcat.embed</groupId>
                        <artifactId>tomcat-embed-jasper</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

Gradle配置

dependencies {
    providedRuntime 'org.apache.tomcat.embed:tomcat-embed-jasper'
}

springBoot {
    mainClass = 'com.yourpackage.YourApplication'
}

war {
    exclude 'WEB-INF/lib/tomcat-embed-*.jar'
}

2. 自定义Tomcat资源加载逻辑

在启动类所在包添加Tomcat配置类,强制修改资源加载方式,避免zip文件被提前关闭:

import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TomcatConfig {

    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() {
        return factory -> {
            factory.addContextCustomizers(context -> {
                context.setResourceCache(null);
                context.setWorkDir(System.getProperty("java.io.tmpdir") + "/tomcat-jsp-work");
            });
        };
    }
}

3. 升级Tomcat嵌入版本

Spring Boot 3.0默认的Tomcat嵌入版本可能存在JSP类加载的bug,手动指定兼容的更高版本:

Maven配置

<properties>
    <tomcat.version>10.1.8</tomcat.version>
</properties>

Gradle配置

ext['tomcat.version'] = '10.1.8'

4. 换用手动解压WAR包启动

避免直接用java -jar运行WAR包,改为先解压再启动,模拟Eclipse的运行环境:

# 解压WAR包到指定目录
unzip your-project.war -d project-unpacked
# 进入解压目录启动项目
cd project-unpacked
java -cp WEB-INF/lib/*:WEB-INF/classes com.yourpackage.YourApplication

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:45:50