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

部署时classpath引用jakarta.servlet.jsp.jstl-api-2.0.0.jar不存在如何解决

部署报错:classpath引用jakarta.servlet.jsp.jstl-api-2.0.0.jar不存在 排查与解决方案

排查步骤

  • 校验本地依赖与构建产物完整性:Maven项目检查本地仓库路径jakarta/servlet/jsp/jstl/jakarta.servlet.jsp.jstl-api/2.0.0/下是否存在完整jar包,确认无下载失败生成的.lastUpdated标记文件;Gradle项目检查对应缓存目录文件完整性,同时校验部署包内的依赖目录(传统WAR包看WEB-INF/lib、Spring Boot可执行jar看BOOT-INF/lib)是否包含该jar。
  • 检查依赖作用域配置:确认该依赖没有被配置为provided、testImplementation等不会随项目打包的作用域,这类作用域的依赖不会被带入部署产物,运行时必然报classpath缺失。
  • 检查依赖排除规则与冲突:全局搜索构建配置文件(Maven为pom.xml、Gradle为build.gradle/build.gradle.kts),确认没有配置针对jakarta.servlet.jsp.jstl-api的全局排除规则,同时排查是否有其他依赖传递引入了不同坐标、不同版本的JSTL包造成冲突。
  • 检查运行容器兼容性:注意:jakarta.servlet.jsp.jstl-api 2.0.0属于Jakarta EE 9+规范组件,仅适配Tomcat 10+、Jetty 11+、WildFly 22+及以上版本的容器,如果使用Tomcat 9及更低版本(采用javax.servlet命名空间),会因为命名空间不匹配无法识别该jar,抛出类路径缺失错误。

解决方案

  • 依赖缓存损坏场景:删除本地仓库/缓存中对应jakarta.servlet.jsp.jstl-api/2.0.0的目录,强制刷新依赖重新构建:
    • Maven执行命令:mvn clean install -U
    • Gradle执行命令:./gradlew build --refresh-dependencies
  • 依赖作用域配置错误场景:调整依赖作用域为运行时/编译范围,确保依赖会被打包进部署产物,参考配置如下:
    Maven依赖配置:
    <dependency>
        <groupId>jakarta.servlet.jsp.jstl</groupId>
        <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
        <version>2.0.0</version>
        <scope>compile</scope>
    </dependency>
    
    Gradle依赖配置:
    implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api:2.0.0'
    
  • 依赖排除/冲突场景:删除不必要的全局排除规则,若存在多版本JSTL冲突,在构建配置中统一JSTL版本为2.0.0,排除其他不兼容的JSTL依赖。
  • 容器版本不兼容场景:二选一调整即可:
    • 升级Web容器到支持Jakarta EE 9+的版本,同步将项目内所有servlet、jsp相关依赖切换为jakarta分组的对应版本
    • 若必须使用老版本容器(Tomcat 9及以下),将JSTL降级为适配javax命名空间的1.2.x版本,同步将所有servlet、jsp相关依赖切回javax.servlet分组的对应版本,避免命名空间混用。
  • 特殊场景说明:使用Spring Boot以可执行jar方式部署时,JSP相关依赖默认不会被打入可执行jar,需要额外配置打包参数确保JSTL相关依赖被包含在部署产物中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:12:21