Tomcat& Spring Web - 未找到类异常org.springframework.web.context.ContextLoaderListener

时间:2011-06-12 15:21:57

标签: java eclipse spring tomcat maven

当我尝试通过Eclipse启动Tomcat时,我得到以下异常(通过右键单击Project,Run As - > Run on Server)。

SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4660)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Jun 12, 2011 8:46:11 PM org.apache.catalina.core.StandardContext listenerStart

我正在使用Maven(m2eclipse)构建我的项目。我已经为Spring库添加了必要的依赖项,我可以在最终工件(包含类)的lib目录中看到spring-web.jar文件。当我在IDE之外部署应用程序时,它可以正常工作。

关于为什么会发生这种情况的任何指示都将受到高度赞赏。

3 个答案:

答案 0 :(得分:79)

我几天前在Eclipse Indigo上使用m2eclipse(没有通过m2eclipse-extras提供的WTP集成添加)遇到了同样的问题。我创建了一个Maven Web模块并手动添加了动态Web模块方面。当我在Eclipse WST Tomcat服务器上部署它时,看来我的Maven依赖项在项目发布到服务器时没有被推送到服务器。

解决方案很简单。在Project Explorer中右键单击您的Web项目 - >选择“属性”。在项目属性下,选择“部署程序集”。

Deployment Assembly属性页面显示Eclipse将作为汇编工件发布到服务器的内容。您需要告诉Eclipse您希望发布所有Maven依赖项。

为此,单击“添加”按钮,然后选择“Java构建路径条目”。单击“下一步”,然后选择“Maven依赖项”。当Eclipse将项目发布到WST服务器时,这将把Maven依赖JAR文件发布到lib文件夹。

这种方法对我有用。

答案 1 :(得分:4)

告诉Eclipse将在war文件中放入服务器部署的最简单方法是右键单击 - >出口 - > WAR文件。然后你可以解压缩它,看看里面是什么。

如果你打开“.settings / org.eclipse.wst.common.component”,你应该看到web工具webapp的定义,并看到如下内容:

<project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="MyApp">
    <wb-resource deploy-path="/" source-path="/src/main/webapp"/>
    <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
    <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
    <property name="java-output-path" value="target/classes"/>
    <property name="context-root" value="MyApp"/>
</wb-module>
</project-modules>

在Eclipse中的构建路径上,确保“Maven Dependencies”出现在库中。 m2eclipse插件和WST的最新版本应该自动获取Maven依赖项并将它们放在war文件中的WEB-INF / lib中。

最后但并非最不重要的一点是,您可能需要考虑购买SpringSource Tool Suite(STS)的最新副本。 STS有许多很好的功能,包括捆绑最新的m2eclipse和WST。您仍然可以将它与Tomcat(或他们的Tomcat版本)一起使用,并且它有一些原型和教程可以让webapp快速运行。

享受!

答案 2 :(得分:0)

将这些文件(您恰好使用的版本)添加到

apache-tomcat-8.0.35\lib 

文件夹(并重启服务器):

spring-aop-4.0.1.RELEASE.jar
spring-beans-4.0.1.RELEASE.jar
spring-context-4.0.1.RELEASE.jar
spring-core-4.0.1.RELEASE.jar
spring-expression-4.0.1.RELEASE.jar
spring-web-4.0.1.RELEASE.jar
spring-webmvc-4.0.1.RELEASE.jar