Диагностируем Причину, Выживаем В Jar-Аде: Серой Не Дышим И В Котле Не Кипятим

Бывает, что в большом проекте, работающем в jvm, внезапно Оказывается, приложение не работает и даже не запускается при обновлении какой-либо из зависимостей проекта.

То же самое возможно из-за любого другого события, которое изменило порядок библиотек в пути к классам приложения.



Диагностируем причину, выживаем в JAR-аде: серой не дышим и в котле не кипятим

Лирическое отступление о причине этого явления , все до безобразия просто.

В jvm до реализации проекта головоломка «из коробки» невозможно было в одной jvm одновременно загрузить несколько разных версий одного и того же класса с одним и тем же именем пакета+класса (полное имя) из разных jar-файлов.

Были загрузчики классов J2EE, самописные загрузчики классов или их композиции, OSGI-контейнеры, но это тема другой публикации и совсем другого мира.

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

Итак, что, если ваше приложение начало выдавать шквал NoSuchMethodError/ClassNotFoundException или вести себя странно без единого изменения в исходном коде проекта.

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

jАид .

Если вы можете изменить код приложения, то просто добавьте в зависимость артефакт maven. org.jhades:jhades:1.0.4 и фрагмент кода Теги: #jarhell #jHades #aspectj-scripting #разработка веб-сайтов #открытый исходный код #программирование #java

Вместе с данным постом часто просматривают: