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

Spring Boot内嵌Tomcat启动失败:zip file closed异常

Spring Boot 3.0.2(内嵌Tomcat 10.1.5)启动报错:zip file closed

使用Spring Boot 3.0.2(内嵌Tomcat 10.1.5)启动服务时触发以下错误,完整堆栈信息如下:

Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[/IAMWeb]]
        at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)

Caused by: java.lang.IllegalStateException: zip file closed
        at java.base/java.util.zip.ZipFile.ensureOpen(ZipFile.java:831)
        at java.base/java.util.zip.ZipFile.getManifestName(ZipFile.java:1057)
        at java.base/java.util.zip.ZipFile$1.getManifestName(ZipFile.java:1100)
        at java.base/java.util.jar.JarFile.getManEntry(JarFile.java:937)
        at java.base/java.util.jar.JarFile.checkForSpecialAttributes(JarFile.java:1000)
        at java.base/java.util.jar.JarFile.isMultiRelease(JarFile.java:389)
        at org.apache.tomcat.util.scan.JarFileUrlJar.<init>(JarFileUrlJar.java:68)
        at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:41)
        at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:393)
        at org.apache.tomcat.util.scan.StandardJarScanner.processURLs(StandardJarScanner.java:328)
        at org.apache.tomcat.util.scan.StandardJarScanner.doScanClassPath(StandardJarScanner.java:271)
        at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:234)
        at org.apache.jasper.servlet.TldScanner.scanJars(TldScanner.java:262)
        at org.apache.jasper.servlet.TldScanner.scan(TldScanner.java:104)
        at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:83)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5144)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
        ... 43 common frames omitted

解决办法

  • 检查依赖完整性:删除本地仓库中可能损坏或重复的Jar包,重新拉取所有依赖。这类报错大概率是Tomcat扫描类路径时,某个Jar文件被提前关闭或损坏导致。
  • 跳过不必要的Jar扫描:在Spring Boot配置文件中添加Tomcat扫描过滤规则,减少扫描范围:
    # 跳过所有Jar的TLD扫描,可按需调整为特定Jar
    server.tomcat.additional-tld-skip-patterns=*.jar
    
    或者通过Java代码配置:
    @Bean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory() {
        return new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                StandardJarScanner jarScanner = (StandardJarScanner) context.getJarScanner();
                // 关闭Manifest扫描,避免触发Jar文件检查
                jarScanner.setScanManifest(false);
            }
        };
    }
    
  • 验证文件权限:确保应用对类路径下的Jar文件有读取权限,权限不足可能导致Jar被异常关闭。
  • 升级Tomcat版本:将内嵌Tomcat升级到10.1.6及以上版本,官方可能已修复该Jar扫描相关Bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:33:34