2013-04-25 8 views
38

Zbudowałem aplikację internetową przy użyciu spring-mvc i mongodb jako bazę danych. Użyłem maven3 do zbudowania aplikacji.IncompatibleClassChangeError: class ClassMetadataReadingVisitor ma interfejs ClassVisitor jako super klasa

Projekt jest tworzony pomyślnie, ale po uruchomieniu aplikacji otrzymuję następujący komunikat o błędzie, w wyniku którego moja aplikacja się nie uruchamia. To działało kilka miesięcy temu.

Caused by: java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class

Proszę dać mi znać, jeśli jakieś wskazówki lub jeśli potrzebujesz więcej informacji.

Odpowiedz

70

Ten błąd występuje, gdy załadowana klasa, tj. ClassMetadataReadingVisitor, nie przestrzega umowy odziedziczonej klasy abstrakcyjnej lub interfejsu, tj. ClassVisitor.

Wygląda na to, że podczas ładowania różne wersje powyższych klas są ładowane do twojego przypadku.

Wygląda na to, że masz w swojej aplikacji nowy słoik z rdzeniem sprężynowym i stary jar ze sprężyną. ClassMetadataReadingVisitor klasa jest ładowana od sprężynowy i ClassVisitor z wiosna-asm.

Proszę sprawdzić przy użyciu polecenia maven dependency:tree, aby wyświetlić słoiki zależne.

+0

Tak, widzę różne wersje słoików wiosną. Zależności mongodb ciągną najnowsze słoiki. Jak powinienem rozwiązać problem? –

+0

Ponieważ zależności od mongo potrzebują najnowszej wiosny, również podbijasz swoje zależności sprężynowe. Ale powiedziałeś, że kiedyś działało w przeszłości, co oznacza, że ​​słoiki z mongo nie zdefiniowały żadnej wersji ze względu na jej wiosenną zależność, więc najnowszą automatycznie pobierano. Sprawdź mongo słoiki pom. –

+0

Dzięki za poiner. Tak, to słoiki mongo, które nie definiują zależności od wersji. Na razie użyłem najnowszej wersji wiosną. –

0

miałem ten sam problem i czynienia go usuwając moje spring-data-jpa zależność od pom.xml

To już wliczone w zależności spring-core.