我们在做web开发是,经常都要在eclipse中搭建web服务器,并将开发中的web项目部署到web服务器进行调试,在此,我选择的是tomcat服务器。之前部署web项目到tomcat进行启动调试都很正常,今天突然出现无法启动情况,启动过程报如下错误:
Java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
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:133)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4727)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285)
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$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
大家常用的做法是,project clean 。maven clean maven install
其实仔细分析报错的原因是类找不到,该类依赖于spring-web-XXXX.jar,看了下maven依赖库,该依赖是存在的,那是怎么回事,然后再看tomcat目录下的webapps中部署的项目,项目已经部署成功,相应的class文件和静态文件都有了,但仔细一看,在WEB-INF下缺少了lib文件夹,才明白为什么找不到org.springframework.web.context.ContextLoaderListener类了。
为什么在eclipse中启动tomcat时没有将lib拷贝过来,想想之前碰到了项目部署设置的问题。解决办法如下:
右击项目->properties->找到Deployment Assembly,右边便是编译打包的配置,看是不是缺少了lib库的依赖,我的就是,点击Add,添加maven依赖库。最后列表如下
再重新启动tomcat,启动成功!