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

Java Web项目部署遇TagLibraryValidator类找不到错误

问题描述

我正在开发一个Java Web应用,部署项目时遇到如下异常:

java.lang.ClassNotFoundException: javax.servlet.jsp.tagext.TagLibraryValidator
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[na:na]
at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na]
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017) ~[na:na]
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) ~[na:na]
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862) ~[na:na]
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760) ~[na:na]
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681) ~[na:na]
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[na:na]

环境配置

  • Java版本:javac 17.0.10
  • Web服务器/容器:Apache Tomcat 9.0.36
  • 构建工具:Maven

已添加的依赖(pom.xml)

<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/jakarta.servlet.jsp.jstl/jakarta.servlet.jsp.jstl-api -->
<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    <version>3.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.web/jakarta.servlet.jsp.jstl -->
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>2.0.0</version>
</dependency>

已尝试的排查步骤

  • 验证依赖已下载并存在于本地仓库
  • 清理并重新构建项目

疑问

  1. 导致TagLibraryValidator出现NoClassDefFoundError的原因是什么?JSP标签库验证是否需要额外依赖?
  2. 这是否与Servlet API版本或类路径中缺少JAR有关?
  3. 如何解决该问题以成功运行和测试Web应用?

解决方案

问题原因分析

  1. 依赖冲突+类路径缺失:

    • javax.servlet.jsp.tagext.TagLibraryValidator 是JSP API的核心类,你的项目同时混合了javax(Tomcat9使用的规范)和jakarta(Jakarta EE 9+规范)的JSTL依赖,导致类加载混乱;另外Tomcat9默认提供JSP API,但依赖冲突可能覆盖或排除了相关类,引发找不到类的异常。
    • JSP标签库验证不需要额外单独依赖,但必须保证JSP API在类路径中且版本与容器匹配。
  2. 与版本兼容性直接相关:

    • Tomcat9对应Servlet 4.0、JSP 2.3规范,你引入的jakarta.servlet.jsp.jstl-api 3.0.0属于Jakarta EE 9体系,和Tomcat9的javax规范完全不兼容;同时重复引入javax和jakarta版本的JSTL,进一步加剧了类路径冲突。

具体解决步骤

  1. 清理冲突依赖:
    删除pom.xml中所有jakarta命名空间的JSTL依赖,补充适配Tomcat9的JSP API依赖,修改后的pom依赖如下:

    <!-- JSTL 1.2(适配Tomcat9的javax规范) -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <!-- Servlet API 4.0.1(Tomcat9提供,scope设为provided避免重复打包) -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    <!-- JSP API 2.3.3(Tomcat9提供,scope设为provided) -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.3</version>
        <scope>provided</scope>
    </dependency>
    
  2. 重新构建项目:
    执行Maven命令清理并重新打包:

    mvn clean install
    
  3. 验证Tomcat配置:
    检查Tomcat的lib目录下是否存在jsp-api.jar,如果缺失,重新下载Tomcat9的完整安装包替换现有目录。

  4. 检查打包配置:
    确保Maven的war-plugin没有将provided scope的依赖打包到war包中,避免和Tomcat自带的API冲突。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:51:05