среда, 10 февраля 2016 г.

Хроника будней java EE разработчика

Однажды при деплои на тестовый стенд обнаружилась такая ошибка NoSuchMethodException. Просмотр логов дал следующую информацию:


Довольно странное исключение, если учесть, что локально, все работало прекрасно. Наиболее вероятной причиной возникновения данной ошибки - разные версии библиотек. Судя по всему, в проекте оказалось несколько версий одного и того же класса. Как это решается?

  1. Запускаем приложение с флагом -verbose:class. Java отобразит нам список классов, которые были загружены. Вывод в консоли будет примерно следующий:
  2. Теперь у нас есть имя класса и название jar файла. Можно узнать название зависимости в которой содержится данный класс. Для этого, если проект использует maven запускаем команду mvn dependency:tree. Отобразится список всех зависимостей, а так список зависимостей, которые они тянут вместе с собой.
  3. В этом списке ищем название jar файла, который получили на предыдущем шаге. В большинстве случаев, проблема решается исключением данной зависимости. Например, так: