一個java.lang.IncompatibleClassChangeError的問題解決

引入一個第三方庫作一個功能,依往常同樣,引入對應的pom,對方的包裏是有mina的,因此調用的相應的功能的時候報以下錯誤。
java

Exception in thread "pool-18-thread-1" java.lang.IncompatibleClassChangeError
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.register(DefaultIoFilterChain.java:267)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.addLast(DefaultIoFilterChain.java:174)
	at org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder.buildFilterChain(DefaultIoFilterChainBuilder.java:436)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor.addNow(AbstractPollingIoProcessor.java:528)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor.handleNewSessions(AbstractPollingIoProcessor.java:501)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$400(AbstractPollingIoProcessor.java:67)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1116)
	at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)

看起來是mina中一個filter鏈在註冊什麼功能時候發生incompatible的錯誤。shell

首先懷疑是這個第三方庫中的mina和我本地服務的mina衝突了,因而我再pom中找到全部的mina依賴 而後依次註釋掉了。可是其實有些pom內部也會依賴的mina的,因而使用mvn的dependency tree命令查看子依賴
apache

mvn dependency:tree >1.txt

而後依次exclusion掉對應的mina依賴。tomcat

<exclusions>
    <exclusion>
       <groupId>org.apache.mina</groupId>
       <artifactId>mina-core</artifactId>
    </exclusion>
</exclusions>

而後啓動,發現仍是報這個問題。而後debug到DefaultIoFilterChain的register方法。發現mina會依次注入logger和protocol。而後對應的報錯是在注入logger的時候報錯的。而後嘗試再依次註釋掉對應的log4j的依賴。不過仍是有這個問題。ui

==========================================================================================debug

其實理論上這個問題通常環境下已經解決ok了。code

我這邊是因爲其它緣由形成的,分析繼續:是否是我本地環境的問題?因而聯繫了中間件的同窗,發現咱們tomcat下有一個基礎服務的sar包,這個sar包因爲版本太低,和mina的服務衝突。因而升級該sar包(該sar包確實有對mina作更改)。問題解決,服務正常調用。中間件

總結一下,這個問題整整坑了我一天,其實只是一個類衝突的問題,最後升級到了環境問題。這裏總結一下,給後來的同窗排坑用。文檔


參考文檔:http://stackoverflow.com/questions/1980452/what-causes-java-lang-incompatibleclasschangeerror get

相關文章
相關標籤/搜索