啟動時,報錯信息如下:
28-Sep-2018 16:55:41.567 嚴重 [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Error during ServletContainerInitializer processing
javax.servlet.ServletException: Failed to instantiate WebApplicationInitializer class
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:158)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5311)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:729)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:974)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1850)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.accessibleConstructor(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:155)
... 12 more
這個錯誤找了很久的原因,一般都是jar包沖突導致,總結一下一般情況下jar沖突的解決方案:
方案一:給JVM的啟動的時候添加“-XX:+TraceClassLoading”,一般可以再tomcat后者eclipse(其他IDE也可以)中直接添加即可打印(通過該方法本次解決了幾個日志包相互沖突的問題)
方案二:再Eclipse中(其他IDE自己查)按“Ctrl+Shift+T”實現根據類型打開,看是否有多個如下圖本次打開發現:
方案三:再Eclipse中(其他IDE自己查)中打開pom文件中的“Dependency Hierarchy”標簽逐個查找對應的錯誤,如下圖所示:
最終,本次發現“jcapytcha-all”jar包中引用了spring2.0然后導致項目中有兩個spring的反射工具類在外置tomcat部署啟動報錯,做個記錄,轉載注明出處!