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

如何解决运行mvn jetty:run时出现的java.lang.NoClassDefFoundError错误

解决java.lang.NoClassDefFoundError: javax/servlet/jsp/JspFactory错误

这个错误的核心原因很明确:你的项目运行时类路径里缺少JSP相关的API类。javax.servlet.jsp.JspFactory是JSP规范定义的类,而你当前只引入了Servlet核心API(javax.servlet-api),这个包并不包含任何JSP相关的类。

下面是具体的解决步骤:

1. 添加JSP API依赖

在你的Maven pom.xml中添加JSP API的依赖,对应Servlet 3.0版本的JSP API是2.2.1版本:

<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.2.1</version>
    <scope>provided</scope>
</dependency>
  • 为什么设置scope=provided?因为像Jetty、Tomcat这类Servlet容器本身就自带了JSP API的实现,设置为provided可以避免打包时重复引入,减少包体积。
  • 如果添加后还是报错,可以暂时注释掉<scope>provided</scope>,让Maven把这个依赖加入运行时类路径,确认问题解决后再恢复这个配置。

2. 检查Servlet API与Jetty版本的兼容性

注意到你使用的是Jetty6插件,Jetty6本身只支持Servlet 2.5规范,但你引入的是Servlet 3.0.1的API,这可能存在潜在的版本冲突。如果你的项目不需要Servlet 3.0的特性,建议把Servlet API的版本降到2.5,和Jetty6更匹配:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>

3. 验证Jetty插件配置

确保你的Maven Jetty插件版本是稳定的Jetty6版本,比如6.1.26,插件配置示例:

<build>
    <plugins>
        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>6.1.26</version>
            <configuration>
                <!-- 你的Jetty配置,比如端口、上下文路径等 -->
                <connectors>
                    <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                        <port>8080</port>
                    </connector>
                </connectors>
            </configuration>
        </plugin>
    </plugins>
</build>

完成以上配置后,重新运行mvn jetty:run,应该就能解决这个类找不到的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:01:31