Ответ
Да, я участвовал в миграции монолитного приложения с 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.