java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoadListener

java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoadListener

几天来我一直在为这个问题苦苦挣扎(这就是我提供 GitHub link 的原因)。 这是堆栈跟踪:

    SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoadListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoadListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4854)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

我只会指出,我使用 Tomcat 7 并且 运行 来自 Eclipse 中“服务器”选项卡的服务器。

我已经阅读了互联网上关于它的所有内容。提供的最常见解决方案是:

"Go to project properties -> Deployment Assembley, click Add... , select Java Build Path Entries and add the Maven Dependencies to the Web Deployment Assembly."

它对我不起作用,就像我目前在 Internet 上看到的其他解决方案一样。我很绝望。

我正在为我的项目提供 GitHub link:https://github.com/wiewioraseb/beer-blog-hiccup.git 我已经尝试将其导出到另一台计算机,但在另一台计算机上 运行ning 时仍然出现相同的错误。

link 说: 在部署环境中,只需确保您的服务器类路径包含 Spring jar 库(例如 spring-2.5.6.jar)。

对于Spring3,ContextLoaderListener被移动到spring-web.jar,您可以从Maven中央仓库获取库。

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>3.0.5.RELEASE</version>
</dependency>

您确定您的构建路径(在 eclipse 中)实际上包含所有依赖项(在本例中特别是 spring-web 和 spring-webmvc)? 如果您构建一个 *.war 文件,使用 mvn clean install,如果您解压它,这些库可能会包含在其中。

但是,这与 Eclipse 不同。因此,我建议在您的目录中使用 运行ning mvn clean install eclipse:clean eclipse:eclipse。然后在 Eclipse 中刷新项目并清理它(项目 -> 清理)。

要查看库是否正确部署,请双击您的服务器并转到此位置(在您的工作区文件夹中):

并检查 WEB-INF/lib 文件夹中的依赖项(*.jar 文件)。

一般来说,这可以解决我的问题。你应该:

  • 在 Eclipse 中关闭服务器
  • 右键单击 -> 清理 -> 清理 Tomcat 工作目录
  • 运行上面的命令
  • 启动服务器

class 到 bootstrap Spring 根上下文的正确侦听器是 ContextLoaderListener,而不是 ContextLoadListener!所以在 web.xml 中应该是:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>