【问题标题】:Having exception. Spring 3 with Spring Tool Suite, Tomcat 7 and Maven有例外。带有 Spring Tool Suite、Tomcat 7 和 Maven 的 Spring 3
【发布时间】:2011-11-27 15:28:51
【问题描述】:

我是 Spring 3 的新手。我新安装了 Eclipse Indigo,Spring Tool Suite。 使用 Spring 工具套件“Spring 模板 --> Spring MVC 项目”。我创建了一个 Hello world 应用程序。

运行应用程序时。它给出了一个例外。

java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;" the class loader (instance of org/apache/jasper/servlet/JasperLoader) of the current class, org/apache/jsp/index_jsp, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ExpressionFactory used in the signature
org.apache.jsp.index_jsp._jspInit(index_jsp.java:31)
org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:49)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:181)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

设置有什么问题

【问题讨论】:

  • Bozho 是对的,问题在于您有第二个 el-api.jar。但如果它是用<scope>provided</scope> 定义的,则依赖项必须来自其他地方。但要验证这一点,我建议您通过 maven 构建应用程序,然后手动部署战争(不使用 IDE)。如果异常没有消失,请检查未提供的其他依赖项是否依赖于el-api.jar(STS、pom.xml、依赖层次结构选项卡)
  • Bozho 我尝试根据您的指导启用 m2e-wtp 设置。但是我的 Eclipse 被绞死了。所以尝试了拉尔夫的选择。在Tomcat中手动部署了WAR文件并试了一下。错误消失了。注意:我必须删除 pom.xml 中 el-api.jar 的 标签。
  • WAR 是否与提供的 el-api 和范围一起使用?

标签: java eclipse spring maven tomcat7


【解决方案1】:

WEB-INF/lib 中删除任何el-api.jar

如果您在 IDE 中运行,您最多应该有 el-api.jarprovided 范围。即使这样,它仍然可能会失败,因为 IDE 有时不会考虑范围。我认为m2e-wtp 插件应该可以修复它。

【讨论】:

  • WEB-INF/lib目录下没有el-api.jar。我没有在 MVC 结构给出的默认设置中添加任何内容。
  • 你的 WEB-INF/lib 的内容是什么? (或者,如果您通过 IDE 进行部署 - 您的依赖项列表中是否有该 jar)
  • 是的,在 pom.xml 中我已经给出了依赖 <dependency> <groupId>javax.el</groupId> <artifactId>el-api</artifactId> <scope>provided</scope> <version>2.2</version> </dependency>。我的 WEB-INF/lib 也是空的。
  • @Ezhil - 这是 IDE 的常见问题 - 它们不考虑“提供”范围并复制 jar。查看我的更新
  • @Bozho:对不起,但在这种情况下它不是 IDE,带有 M2Eclipse 的 sts 可以正确处理提供的范围。
【解决方案2】:

这是因为该模板是为带有 JSP 2.1 的 Tomcat 6.0 创建的,而 Tomcat 7.0 可用于 JSP 2.2。 正如您在此页面中看到的: http://tomcat.apache.org/whichversion.html.

我尝试在 pom.xml 中将 jsp jar 更改为 2.2 并添加 el-api 2.2。但这还不够。我没有找到最后的问题。

最后我选择使用tomcat 6。

问候

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,通过编辑 POM 解决了这个问题,将 jsp-api 版本从 2.1 更改为 2.2

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>  <!-- 2.1 for Tomcat 6, 2.2 for Tomcat 7 -->
            <scope>provided</scope>
        </dependency>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-17
      • 2015-05-14
      • 1970-01-01
      • 2014-03-13
      • 1970-01-01
      • 2015-06-27
      • 2017-05-26
      • 2012-03-11
      相关资源
      最近更新 更多