Боже, джаву храни!

Не так давно я писал об нарушении обратной совместимости как главном грехе разработчика.

У меня есть несколько Ruby приложений которые уже давно живут в продакшене. Версия ruby, которую я использовал, 2.5, перестала поддерживаться, и всех попросили переехать на 2.7. Однако сделать это было не так просто. Бампнув версию и попытавшись запустить я получил кучу ошибок. Я отложил это дело до лучших дней и недавно в приступе прокрастинации все-таки пофиксил что там ругалось и завел их на новой версии. Но, это был бамп минорной версии.

То ли дело Java. Обновив библиотеку Sentry на одном з проектов после деплоя я увидел что она по какой-то причине не захотела заводиться на 8-ой JRE, хотя в доках написано что 8-ая джава поддерживается. Как-то так получилось что разрабатывал я на 11 (с 1.8 source compatibility), а в продакшн заливал докер имедж собранный с 8. Не спрашивайте как, сам удивился.

Так вот, локально все работало, а на проде сломалось. Я решил обновить джаву на проде до 11. Но оказалось, что openjdk не собирают alpine имеджей для 11 джавы. Их вообще почти ни для чего не собирают. Зато для 17-ой alpine-имедж был. Ну я и взял его, чисто наудачу. При том что 17-ая версия еще официально не вышла, а sdkman не содержит даже бинарников 17-ой.

Переключил CI и сборку на 17, тесты пробежали, имедж собрался, я его задеплоил—вуаля—всё работает!

Это при том что я прыгнул с 8-ой версии (которой уже 7 лет) на 17-ю (которая еще даже официально не вышла) и абсолютно ничего не менял в кодобазе.

Вот чему у JVM стоит поучиться, так это поддержке обратной совместимости. Приложение у меня Spring Boot рест сервис.

А как у вас обстоят дела с обновлением рантаймов?


Понравился материал? Подписывайся на мой телеграм канал: https://t.me/full_of_hatred