1

我正在尝试部署一个新的 Spring MVC 应用程序,我已经做了十几次,但现在我遇到了一个非常奇怪的错误,甚至无法弄清楚发生了什么:

  1. 我的 javaee-api 与 servlet-api 冲突。在控制台中它写道:

       INFO: validateJarFile(E:\development\workspace\conference\src\main\webapp\WEB-    INF\lib\javaee-api-6.0.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2.
       Offending class: javax/servlet/Servlet.class
    

嗯,是的,这是一个警告,但是这个 jar 没有加载,我需要它。此外,我的应用程序库等中没有 servlet-api jar。

  1. 此外,控制台会抛出这样的异常:

     SEVERE: Error configuring application listener of class com.sun.faces.config.ConfigureListener
     java.lang.ClassNotFoundException: com.sun.faces.config.ConfigureListener
    

我的意思是,这个 jar 是指 JSF 和所有这些东西。我根本没有使用它,它应该在哪里尝试获得这样的课程?o_o

我在 tomcat 7 上运行应用程序

有什么想法吗?

4

2 回答 2

2

jar 文件的问题是 Tomcat 的类加载器验证所有类,它加载到 JVM。在您的情况下,它面临来自 servlets API 的类 - javax.servlet.Servlet。你的应用程序代码不能在里面包含这样的类WEB-INF/lib。这些类与 servlet 容器本身一起提供。如果您使用 maven,只需将范围更改javax.servlet:servlet-apiprovided.

修复此问题后,尝试重新加载整个应用程序,因为可能会发生类加载器完全阻塞javaee-api-6.0.jar,不允许从中加载任何其他类。

于 2013-02-23T22:57:53.023 回答
0

您可以通过在其依赖项中javaee-api-6.0.jar设置范围来从 webapps 的 WEB-INF/lib 目录中删除该文件。provided

规范指的是 Servlet 容器(这里是 Tomcat)将提供 Java EE 规范的实现类。具有特定于应用程序的实现是规范/Tomcat 不允许的稳定性和安全性问题。

谢谢!

于 2013-02-24T16:05:50.213 回答