IncompatibleClassChangeError: класс ClassMetadataReadingVisitor имеет интерфейс ClassVisitor как суперкласс
Я создал веб-приложение с использованием spring -mvc и mongodb в качестве базы данных. Я использовал maven3 для создания приложения.
Проект выполняется успешно, но когда приложение запускается, я получаю следующую ошибку в журналах, из-за которых мое приложение не запускается. Это работало несколько месяцев назад.
Вызвано: java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor имеет интерфейс org.springframework.asm.ClassVisitor как суперкласс
Пожалуйста, дайте мне знать, если какие-либо указатели или вам больше нужна информация.
Ответы
Ответ 1
Эта ошибка возникает, когда загруженный класс i.e. ClassMetadataReadingVisitor
не соблюдает контракт наследуемого абстрактного класса или интерфейса, т.е. ClassVisitor
.
Похоже, что во время загрузки различные версии вышеуказанных классов загружаются в ваш случай.
Кажется, у вас есть новый spring -core jar и старый spring -asm jar в вашем приложении. ClassMetadataReadingVisitor
класс загружается из spring -core и ClassVisitor
из spring -asm.
Пожалуйста, проверьте с помощью команды maven dependency:tree
, чтобы увидеть зависимые баночки.
Ответ 2
В spring версии > 3.2.0 вам больше не нужно явно включать spring-asm
, поскольку оно уже включено в spring-core
.
Удалите spring-asm
из определения вашей сборки и убедитесь, что spring-core
существует.
http://static.springsource.org/spring-framework/docs/current/spring-framework-reference/html/migration-3.2.html#migration-3.2-inline-asm
Ответ 3
Эта ошибка обычно появляется, когда используются несовместимые версии банок, например spring-asm
и spring-core
. Посмотрите forum.springsource.org/showthread.php?133341
Ответ 4
У меня была такая же проблема, и я столкнулся с ней, удалив мою зависимость spring-data-jpa
от pom.xml
Он уже включен в зависимость spring-core
.