IncompatibleClassChangeError: class ClassMetadataReadingVisitor has interface ClassVisitor as super class
java, maven-3, spring-mvc
Solution
This error happens when the loaded class i.e. `ClassMetadataReadingVisitor` does not respect the contract of inherited abstract class or interface i.e. `ClassVisitor`.
Looks like at load time different versions of the above classes are getting loaded in your case.
Seems you have new spring-core jar and old spring-asm jar in your application. `ClassMetadataReadingVisitor` class is getting loaded from spring-core and `ClassVisitor` from spring-asm.
Please check using maven `dependency:tree` command to see the dependent jars.
Problem
I have built a web application using spring-mvc and mongodb as database. I used maven3 to build the application. Project builds successfully but when application starts I am getting the following error in the logs due to which my application does not start. This used to work few months ago. Caused by: java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class Please let me know if any pointers or if you guys need more information.