Суровые будни jar-а

Легаси проект, работает в контейнере. Мы пилим артефакт, fat jar, деплоим его в контейнер.

В один прекрасный момент хотим заюзать какую то либу. Добавляем в депенденси, пишем код, собираем, все отлично. Деплоим, запускаем, приложение падает с ексепшеном типа "java.lang.NoSuchMethodError".

Охереваем....

Долго пытаемся понять в чем дело.

После часов извращений копируем ВСЕ джарники которые загружает контейнер.

Выполняем:

for f in `ls *.jar`; do echo "$f: "; unzip -l $f | grep <file_name>; done

Находим что какая то гребаная dependency которую загружает контейнер тоже fat jar и в нее запилен именно тот класс который мы пытаемся заюзать, только, конечно, какой то древней версии, в которой нет нужного метода (или у него другая сигнатура).

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

Если обратной совместимости нет - ощущаем боль.

Written on September 15, 2014