【轉】maven 項目出現 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener


http://blessht.iteye.com/blog/1104450

http://www.cnblogs.com/zhouyalei/archive/2011/11/30/2268606.html

 

嚴重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

 

最近在做spring+struts2+IbatIS的項目,昨天eclipse啟動服務器正常,結果今天來了就總是報錯,錯誤如下:

嚴重: 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:1352) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1198) 
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3677) 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4187) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013) 
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013) 
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442) 
at org.apache.catalina.core.StandardService.start(StandardService.java:450) 
at org.apache.catalina.core.StandardServer.start(StandardServer.java:709) 
at org.apache.catalina.startup.Catalina.start(Catalina.java:551) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:585) 
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)

 

網上查,好多人說是沒有spring的相關包,但是我有些不贊成,因為我的昨天還能啟動的,所以應該不是這個問題

最后我發現可能是tomcat的緩存問題,解決方法為:

把eclipse里面的servers全部刪除,然后把工程clean一下,之后重新建一個server運行。這樣問題的就解決了。

 

在網上找了些資料,有的說是少jar包,把有關spring的jar包復制到/WEB-INF/lib下面就行了,但這是maven項目,不需要這樣做...

還有一個原因是,項目不是maven項目,我這個之前是普通的web項目,只是加上了一個pom.xml而已
需要修改的有兩個地方
1.項目根目錄下的.project文件,用記事本打開,加入以下代碼(把原來的<buildSpec>節點和<natures>替換了):

復制代碼
  <buildSpec>
<buildCommand>
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.maven.ide.eclipse.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.maven.ide.eclipse.maven2Nature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>
復制代碼


2.項目根目錄下的.classpath,找到

<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>

替換為:

<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>

新增加一個classpathentry節點:

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>

OK,到這一步已經完成了,到eclipse中刷新項目,然后重新啟動tomcat,錯誤已經解決!



在.classpath文件中:

<classpathentry kind="output" path="target/classes"/>

改為:

<classpathentry kind="output" path="WebContent/WEB-INF/classes"/>

習慣,^_^,把編譯后的文件放到WEB-INF/classes下面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM