Миграция с Tomcat 7 на Tomcat 8: ошибка несовместимости: найден класс org.objectweb.asm.AnnotationVisitor

#spring #migration #tomcat7 #tomcat8

#весна #миграция #tomcat7 #tomcat8

Вопрос:

Я столкнулся со следующей проблемой. Используя скомпилированное программное обеспечение, я пытаюсь запустить его на Tomcat 8 вместо Tomcat 7. После решения некоторых незначительных проблем я застрял на этом:

org.springframework.beans.factory.Исключение BeanCreationException: ошибка при создании компонента с именем … Не удалось вызвать метод инициализации; вложенным исключением является java.lang.Ошибка несовместимости: найден класс org.objectweb.asm.AnnotationVisitor, но интерфейс был ожидаемым

При чтении кажется, что это связано с разницей в версии Spring. Проблема в том, что я вообще не касаюсь приложения здесь. Tomcat 7 и Tomcat 8 запускают точно такую же программу.

Могу ли я спросить вас о ваших предложениях по ее решению?

Комментарии:

1. Порядок загрузки классов может меняться в разных версиях. И, по-видимому, вы перепутали jar в своем приложении.

2. Спасибо, что изучили это. Как бы вы начали его отслеживать. Смешанные банки означают указание на разные Spring или что?

3. ДА… Проверьте свои зависимости (фактические из них заканчиваются войной).

4. Теперь я на шаг вперед. Ваш совет приблизил меня к решению, спасибо! У меня больше нет этой ошибки, но по причинам, которые я не знаю, приложение еще не запускается должным образом. Как только я узнаю, что пошло не так, я собираюсь поделиться опытом здесь.

Ответ №1:

По пути расследования проблемы я узнал об этом билете: https://bz.apache.org/bugzilla/show_bug.cgi?id=57129

Похоже, что Tomcat 8, в отличие от более ранней версии Tomcat, не загружает классы в алфавитном порядке. В моем проекте это вызвало проблему, поскольку там, где использовались библиотеки, содержащие разные версии asm.

Примечание: В тикете, отправленном сверху в apache, кто-то ссылается на обходной путь по адресуhttps://github.com/openwide-java/tomcat-classloader-ordered . Однако у меня это не сработало.

В конце концов, нам пришлось проделать сложную работу по удалению зависимостей и исправлению проекта таким образом, чтобы он полагался только на одну версию lib.

Удачи всем, кто борется с подобными вещами!