> ## Content Index
> Fetch the complete content index at: https://www.rozhkov.me/llms.txt
> Use this file to discover other available public pages before exploring further.

# Боже, джаву храни!
- URL: https://www.rozhkov.me/god-save-the-java/
- Published: 2021-06-25T06:00:00.000Z
- Updated: 2021-06-25T06:00:00.000Z
- Author: Vova Rozhkov
- Tags: інструменти

Не так давно я писал об [нарушении обратной совместимости](https://www.rozhkov.me/developers-sins-backward-incompatibility/) как главном грехе разработчика.

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

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

Так вот, локально все работало, а на проде сломалось. Я решил обновить джаву на проде до 11\. Но оказалось, что openjdk не собирают alpine имеджей для 11 джавы. [Их вообще почти ни для чего не собирают](https://github.com/docker-library/openjdk/issues/440). Зато для 17-ой alpine-имедж был. Ну я и взял его, чисто наудачу. При том что 17-ая версия еще официально не вышла, а [sdkman](https://sdkman.io/) не содержит даже бинарников 17-ой.

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

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

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

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