Ответ
Да, я участвовал в миграции монолитного приложения с Java 8 на Java 11.
Основные задачи и вызовы:
- Обновление зависимостей: Анализ и обновление библиотек (Maven/Gradle), включая проблемные, такие как Lombok и JAXB, которые требовали совместимых версий для Java 9+.
- Замена устаревшего API: Поиск и рефакторинг кода, использовавшего deprecated API из
javax.*, на их аналоги вjakarta.*или стандартной библиотеке. - Работа с модульной системой (JPMS): Настройка
module-info.javaдля разрешения зависимостей и доступа между модулями. - Тестирование: Проведение всестороннего тестирования, особенно функционала, использующего Reflection и сериализацию, которые могли сломаться.
Пример изменения кода:
До миграции (использовался javax.xml.bind):
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement // В Java 9+ этот API был вынесен в отдельный модуль
public class User {
private String name;
}
После миграции (используется jakarta.xml.bind):
import jakarta.xml.bind.annotation.XmlRootElement;
@XmlRootElement // Зависимость была явно добавлена в проект
public class User {
private String name;
}
Процесс занял около трех месяцев и включал постепенный rollout на тестовых стендах перед выкаткой в production.
Ответ 18+ 🔞
А, ну это ж классика, блядь! Миграция с восьмой явы на одиннадцатую — это как переезд из развалюхи в новостройку, только в процессе всю мебель ломают, а половину вещей говорят «это, сука, теперь несовместимо, нахуй выбрось».
Основные пиздецы, с которыми столкнулся:
- Зависимости, ёпта! Открываешь
pom.xml, а там как в старом комоде — одни кости да пыль. Каждая библиотека орет: «Я на восьмерке родилась, на восьмерке и помру!». Особенно эти выебнутые — Lombok да JAXB. С ними танцы с бубном, пока совместимую версию найдешь, чтоб она и с новой явой дружила, и друг другу в глаза не шипела. - Устаревшее API, блядь. Весь этот
javax.*взял да и отправили на пенсию. Сидишь, как дурак, ищешь по всему проекту эти импорты, а потом меняешь наjakarta.*. Чувствуешь себя археологом, который переписывает историю, ебать. - Модульная система, ядрёна вошь! Эта
module-info.java— просто пиздец головного мозга. Кто что от кого требует, кто кого экспортирует... Разбираешься, будто рассаживаешь пьяных родственников за свадебным столом, чтобы они не подрались. - Тестирование, волнение ебать. Особенно всё, что связано с рефлексией и сериализацией. Работало же, сука, как часы! А теперь — хоба, и вылетает с ошибкой, потому что какой-то внутренний пакет теперь спрятан, как золото у жадного деда. Приходится всё ползком, на ощупь проверять.
Вот, смотри, как код преобразился, блядь:
Раньше было так (старая добрая javax):
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement // А в новых явах этот API, блядь, отдельным модулем пошёл, надо скачивать!
public class User {
private String name;
}
А теперь вот так (модная jakarta):
import jakarta.xml.bind.annotation.XmlRootElement;
@XmlRootElement // Явно, блядь, добавили зависимость в проект, чтоб всё летало
public class User {
private String name;
}
В общем, три месяца, сука, жизни. Три месяца постепенного выкатывания, когда каждый день просыпаешься с мыслью: «Ну что, на каком тестовом стенде сегодня всё ебнется?». Но в итоге-то завелось!