Maven依賴構建版本衝突(實戰cxf asm和cglib衝突)

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myServices2': Invocation of init method failed; nested exception is java.lang.IncompatibleClassChangeError: Found class org.objectweb.asm.AnnotationVisitor, but interface was expectedjava

 

Caused by: java.lang.IncompatibleClassChangeError: Found class org.objectweb.asm.AnnotationVisitor, but interface was expectedweb

出現.IncompatibleClassChangeError異常了:spring

今天配置CXF2.4.2和spring4.0.2.RELEASE時一直再報:app

Error creating bean with name 'myServices2': Invocation of init method failed; nested exception is java.lang.IncompatibleClassChangeError: Found class org.objectweb.asm.AnnotationVisitor, but interface was expectedmaven

Caused by: java.lang.IncompatibleClassChangeError: Found class org.objectweb.asm.AnnotationVisitor, but interface was expected工具

的錯誤,查看了本身的application-server.xml裏面的bean配置沒問題,找了一下午,最後發現是jar包衝突。spa

從字面含義分析,虛擬機指望使用的是一個Interface型的AnnotationVisitor,實際上Load進來的是一個Class型的。這種問題通常是因爲Compile和Runtime使用的JAR包版本不一致致使的。而這種版本不一致,通常是因爲Maven的包依賴衝突引發。server

使用Ctrl+shift+T去查看org.objectweb.asm.AnnotationVisitor發如今maven項目依賴中發現一個Interface型的AnnotationVisitor一個class的AnnotationVisitor,這就發生了版本衝突問題,咱們須要的是一個Interface,因此須要剔除掉class類型的AnnotationVisitorxml

經過Eclipse的Dependency Hierarchy工具,對pom.xml中的包依賴關係,使用asm.AnnotationVisitor關鍵字進行Filter:blog

咱們清楚的看到在咱們項目的依賴中依賴了一個asm而且AnnotationVisitor類型是class類型的,因此咱們須要剔除掉asm-5.2.jar

asm-5.2.jar中是一個class

而在3.3下是一個interface

咱們須要的是一個接口interface,因此須要剔除掉asm-5.2.jar

果真發現某一個引用的依賴包中,依賴了5.2版本的sam,和本工程所依賴的asm-3.3.jar版本,產生了衝突。

根據項目須要,調整pom文件選定所須要的JAR版本,解決包依賴衝突後,便可解決java.lang.IncompatibleClassChangeError問題。

相關文章
相關標籤/搜索