请帮我解决这个问题。我构建了一个 WAR(使用 Maven)但是当我试图在 Tomcat 中部署它时我得到了一个异常:
org.apache.jasper.JasperException
: Unable to compile class for JSP:
The methodgetJspApplicationContext(ServletContext)
is undefined for the typeJspFactory
我在 stackoverflow 上找到了问题的原因 - 问题是项目类路径中的 Servlet API 与当前版本的 servlet 容器使用的相关库不一致。提供的解决方案是避免添加任何 Servlet API 相关库(servlet-api.jar
、jSTL.jar
、jsp-api.jar
、等)到 lib
- 文件夹。我还找到了 Eclipse ([ How do I import the javax.servlet API in my Eclipse project?) 的解决方案。但我在 IntellijIDEA 中开发,它与 Eclipse 不同。在我的例子中,不可能不将 servlet-api.jar
和 jSTL-${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 .
关于java - Intellij IDEA - org.apache.jasper.JasperException : Unable to compile class for JSP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28253593/