java.lang.IncompatibleClassChangeError: Implementing class的解決辦法,折騰了一天總算解決了


一,問題產生背景

  git更新代碼重啟服務器后,問題就莫名奇妙的產生了,一看報錯信息,基本看不懂,然后上百度去查,基本都是說jar包沖突,於是把矛頭指向maven

二,問題的解決過程

  既然確定了是maven的問題,,按照一貫的手法,clean-->package,試了n多次包括刪repository,刪項目重新git下載等等能干的全都干了,結果每次啟動服務器時,原來非常陌生的報錯信息現在又熟悉的出現在你眼前,那種想砸電腦的心情只有你自己能體會,

后來,我決定擴大問題產生的原因的范圍,一步一步縮小范圍排除,產生這種錯誤的原因無非就三種:idea有問題,maven有問題,tomcat有問題.接下來走上了測試的道路

  1.測試maven和idea

   脫離idea環境用原生態命令行寫maven命令:mvn install -Dmaven.test.skip=true -Dmaven.development=true;測試打包會不會報錯,結果如下:

  顯然測試成功,這一步可以肯定的是,單純的用maven打包和用idea集成maven打包效果是一樣的,由此可以判斷用idea配置的maven很正常,一切都正常.

  接下來就要測試maven打的war包有沒有問題,把自己打的war包扔到別人電腦去測試,沒問題,成功運行,證明了maven沒問題,證明了war包沒問題,證明了之前的想法是錯的.

  2.測試tomcat和idea

  跟之前一樣,先脫離idea環境測試tomcat,刪掉work目錄,刪除掉webapp下的工程,將之前打的war包放到webapp下,然后找到bin目錄下的startup.bat,點擊運行,這時你會發現熟悉的錯誤又出現在你的面前,沒關系,很快你就看不到了,顯而易見,是你的tomcat出問題了.下面是異常信息:

十二月 17, 2016 10:13:31 上午 org.apache.catalina.loader.WebappClassLoader validateJarFile
信息: validateJarFile(F:\eclipseworkspace\pop-auction-center-law_new\pop-auction-center-web\target\pop-auction-center-web\WEB-INF\lib\servlet-api-2.5.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
十二月 17, 2016 10:13:40 上午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory manager
十二月 17, 2016 10:13:46 上午 org.apache.tomcat.util.modeler.BaseModelMBean invoke
嚴重: Exception invoking method manageApp
java.lang.IncompatibleClassChangeError: Implementing class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2775)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1115)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1610)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1488)
at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:1945)
at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:1908)
at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1795)
at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1754)
at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1740)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1245)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:874)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:317)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4881)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:812)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:787)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583)
at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1379)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

  於是重新安裝tomcat測試,果不其然,成功跑起來了,通過這次解決問題的過程讓我明白了,陌生的問題並不是阻礙你繼續前行的絆腳石,重要的是你是如何分析問題解決問題的,這一點很重要.


免責聲明!

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



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