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

Spring Boot 3 升级后JSP应用无法独立运行求助

问题:JSP应用升级Spring Boot 3后java -jar启动失败,gradle bootRun正常

将JSP应用升级至Spring Boot 3后,通过gradle bootRun命令可正常启动,但执行java -jar oldnewjspapp.war以独立应用形式启动时失败,抛出以下堆栈错误:

ERROR 7082 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.context.ApplicationContextException: Unable to start web server
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:164) ~[spring-boot-3.0.1.jar!/:3.0.1]
...
Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
    at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:142) ~[spring-boot-3.0.1.jar!/:3.0.1]
...
Caused by: java.lang.IllegalStateException: zip file closed
    at java.base/java.util.zip.ZipFile.ensureOpen(ZipFile.java:831) ~[na:na]
    at java.base/java.util.zip.ZipFile.getManifestName(ZipFile.java:1057) ~[na:na]
    at java.base/java.util.zip.ZipFile$1.getManifestName(ZipFile.java:1100) ~[na:na]
    at java.base/java.util.jar.JarFile.getManEntry(JarFile.java:937) ~[na:na]
    at java.base/java.util.jar.JarFile.checkForSpecialAttributes(JarFile.java:1000) ~[na:na]
    at java.base/java.util.jar.JarFile.isMultiRelease(JarFile.java:389) ~[na:na]
    at org.apache.tomcat.util.scan.JarFileUrlJar.<init>(JarFileUrlJar.java:68) ~[tomcat-embed-core-10.1.4.jar!/:na]

解决方案

  • 验证WAR包完整性
    先排除WAR包损坏的可能,重新执行构建命令生成完整的WAR包:

    gradle clean bootWar
    

    构建完成后再次尝试java -jar oldnewjspapp.war启动。

  • 调整Tomcat Jar扫描规则
    错误源于Tomcat扫描Jar包时的Zip文件处理异常,可通过配置跳过不必要的Jar扫描:
    在application.properties中添加:

    server.tomcat.jar-scan-skip-patterns=*.jar
    server.tomcat.additional-tld-skip-patterns=*.jar
    

    或者临时通过JVM参数启动:

    java -Dserver.tomcat.jar-scan-skip-patterns=*.jar -jar oldnewjspapp.war
    
  • 检查Java版本与Multi-Release Jar兼容性
    Spring Boot 3要求Java 17及以上版本,确认运行环境符合要求。若WAR包包含Multi-Release类型Jar,可尝试添加JVM参数兼容:

    java --enable-preview -jar oldnewjspapp.war
    

    (仅当依赖确实需要预览特性时使用,优先排查依赖版本冲突)

  • 修正Spring Boot打包配置
    确保build.gradle中WAR打包配置正确,适配JSP应用的资源打包规则:

    plugins {
        id 'org.springframework.boot' version '3.0.1'
        id 'war'
    }
    
    springBoot {
        mainClass = 'com.yourpackage.YourApplication' // 替换为你的主类路径
    }
    
    dependencies {
        providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
        implementation 'javax.servlet:jstl:1.2'
        implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
    }
    

    确认providedRuntime配置正确,避免打包时重复引入Tomcat依赖导致冲突。

内容的提问来源于stack exchange,提问作者Fábio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:20:37