[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-11-25-kak-migrirovat-proekt-s-java-8-11-na-java-21-25":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},421,"kak-migrirovat-proekt-s-java-8-11-na-java-21-25",11,"java-11-25","Java 11–25","🆕","Как мигрировать проект с Java 8\u002F11 на Java 21\u002F25?","Миграция с Java 8\u002F11 на Java 21\u002F25 выполняется поэтапно: сначала обновление JDK и зависимостей, затем переход javax -> jakarta (для Spring Boot 3.x), и наконец включение новых возможностей. OpenRewrite автоматизирует до 80% работы.\n\n### Этап 1: Подготовка\n\n```bash\n# Проверить совместимость зависимостей\n.\u002Fmvnw versions:display-dependency-updates\n.\u002Fmvnw versions:display-plugin-updates\n\n# Ключевые зависимости для обновления:\n# Spring Boot 2.x -> 3.x (требует Java 17+)\n# Hibernate 5.x -> 6.x\n# Lombok -> последняя версия\n# Mockito -> 5.x+\n# Jackson -> 2.15+\n```\n\n### Этап 2: javax -> jakarta (при переходе на Spring Boot 3.x)\n\n\u003Cdetails>\u003Csummary>OpenRewrite конфигурация\u003C\u002Fsummary>\n\n```bash\n# OpenRewrite — автоматическая миграция\n.\u002Fmvnw org.openrewrite.maven:rewrite-maven-plugin:run \\\n  -Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-spring:LATEST \\\n  -Drewrite.activeRecipes=org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0\n```\n\n```xml\n\u003C!-- Или добавить в pom.xml -->\n\u003Cplugin>\n    \u003CgroupId>org.openrewrite.maven\u003C\u002FgroupId>\n    \u003CartifactId>rewrite-maven-plugin\u003C\u002FartifactId>\n    \u003Cversion>5.x\u003C\u002Fversion>\n    \u003Cconfiguration>\n        \u003CactiveRecipes>\n            \u003Crecipe>org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0\u003C\u002Frecipe>\n        \u003C\u002FactiveRecipes>\n    \u003C\u002Fconfiguration>\n\u003C\u002Fplugin>\n```\n\n\u003C\u002Fdetails>\n\n### Этап 3: Основные изменения при миграции\n\n| С версии | Изменение | Действие |\n|----------|-----------|----------|\n| Java 8 -> 11 | Удалены JAXB, JAX-WS | Добавить Jakarta зависимости |\n| Java 8 -> 11 | Module system (JPMS) | Добавить `--add-opens` если нужен reflective access |\n| Java 11 -> 17 | Сильная инкапсуляция internal API | `--add-opens` или заменить internal API |\n| Java 17 -> 21 | javax -> jakarta | OpenRewrite |\n| Any -> 21 | SecurityManager удалён | Убрать использование |\n\n### Этап 4: Включение новых возможностей\n\n```properties\n# Virtual Threads (Java 21+)\nspring.threads.virtual.enabled=true\n\n# Полезные JVM-флаги\n-XX:+UseZGC                    # ZGC для низкой латентности\n-XX:+ZGenerational             # Generational ZGC (Java 21+)\n```\n\n```java\n\u002F\u002F Постепенно обновлять код:\n\u002F\u002F 1. var для локальных переменных (Java 10+)\n\u002F\u002F 2. Records для DTO (Java 16+)\n\u002F\u002F 3. Text Blocks для SQL, JSON (Java 15+)\n\u002F\u002F 4. Switch Expressions (Java 14+)\n\u002F\u002F 5. Pattern Matching (Java 21+)\n\u002F\u002F 6. Sealed Interfaces для domain types\n```\n\n### Частые ошибки\n\n- Мигрировать всё сразу — мигрируйте поэтапно: JDK -> фреймворки -> рефакторинг кода\n- Не обновить Lombok — Lombok сильно зависит от internal API JDK; каждая мажорная версия Java требует обновления\n- Не проверить reflection-зависимости — библиотеки, использующие `sun.misc.Unsafe` или internal API, могут сломаться\n- Игнорировать deprecation warnings — deprecated API могут быть удалены в следующей версии\n\n### Как используется в 2026\n\n- OpenRewrite — стандартный инструмент для автоматической миграции\n- Большинство enterprise-проектов завершили миграцию на Java 17\u002F21\n- Миграция с Java 21 на 25 — минимальные изменения (в основном обновление зависимостей)\n\n> **На собеседовании:** покажите, что знаете поэтапный подход (JDK -> зависимости -> javax\u002Fjakarta -> рефакторинг) и инструмент автоматизации (OpenRewrite). Частая ошибка — пытаться обновить всё одним коммитом. Для senior-уровня упомяните `--add-opens` как временное решение и стратегию отказа от него.","","senior",[15],"java-modern",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Как мигрировать проект с Java 8\u002F11 на Java 21\u002F25? — Gymterview","Миграция с Java 8\u002F11 на Java 21\u002F25 выполняется поэтапно: сначала обновление JDK и зависимостей, затем переход javax -> jakarta (для Spring Boot 3.x), и наконец ","Миграция с Java 8\u002F11 на Java 21\u002F25 выполняется поэтапно: сначала обновление JDK и зависимостей, затем переход javax -> j",[15,13],"Миграция с Java 8\u002F11 на Java 21\u002F25 выполняется поэтапно: сначала обновление JDK и зависимостей, затем переход javax -> jakarta (для Spring Boot 3.x), и наконец включение новых возможностей. OpenRewrite автоматизирует до 80% работы.",true]