程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java.lang.IncompatibleClassChangeError: Implementing class的解決辦法,折騰了一天總算解決了,implementingclass

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

編輯:JAVA綜合教程

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


一,問題產生背景

  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測試,果不其然,成功跑起來了,通過這次解決問題的過程讓我明白了,陌生的問題並不是阻礙你繼續前行的絆腳石,重要的是你是如何分析問題解決問題的,這一點很重要.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved