Intellij IDEA - org.apache.jasper.JasperException:无法为 JSP 编译 class

Intellij IDEA - org.apache.jasper.JasperException: Unable to compile class for JSP

请帮我解决这个问题。我构建了一个 WAR(使用 Maven)但是当我试图在 Tomcat 中部署它时我得到了一个异常:

org.apache.jasper.JasperException: Unable to compile class for JSP:
The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

我在 Whosebug 上找到了问题的原因 - 问题是项目类路径中的 Servlet API 与当前版本的 servlet 容器使用的相关库不一致。提供的解决方案是避免将任何 Servlet API 相关库(servlet-api.jarjstl.jarjsp-api.jar 等)添加到 lib - 文件夹。我还找到了 Eclipse ([How do I import the javax.servlet API in my Eclipse project?) 的解决方案。但我在 IntellijIDEA 中开发,它与 Eclipse 不同。在我的例子中,不可能不将 servlet-api.jarjstl-${version}.jar 添加到类路径中。如果我不添加它们,我就无法编译项目。如果有人能帮助我解决这个问题,我将不胜感激。

使用 Maven 时,您可以使用 provided scope 从 war 中排除依赖项,如下所示:

<dependencies>
    <dependency>
        <groupId>some.group.id</groupId>
        <artifactId>some-artifact-id</artifactId>
        <version>x.y.z</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

您需要为 tomcat 提供的所有依赖项执行此操作。


Intellij Idea也提供了类似的作用域机制,详见文档here