Ответ
Миграция с Java 8 на Java 11 требует планирования. Основные шаги и проблемы:
-
Анализ зависимостей и API:
- Используйте
jdepsдля анализа использования внутренних API JDK. - Запустите
jdeprscanдля поиска устаревших (deprecated) API в вашем коде и библиотеках. - Проверьте совместимость всех сторонних библиотек с Java 11.
- Используйте
-
Работа с удаленными модулями: Некоторые пакеты (например,
javax.xml.bind,javax.activation) были удалены из JDK и стали опциональными. Их необходимо добавить как явные зависимости.<!-- Пример для Maven: добавление JAXB --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.3.5</version> </dependency> -
Обновление инструментов сборки: Убедитесь, что версии Maven, Gradle и их плагинов (особенно компилятора) поддерживают Java 11.
-
Обработка предупреждений о рефлексии: В Java 9+ был введен модульный доступ. Для legacy-кода, использующего рефлексию к внутренним API JDK, может потребоваться флаг JVM
--illegal-access=warn(илиpermitдля совместимости). -
Использование новых возможностей: После миграции можно начать использовать новые фичи Java 9-11, такие как
varдля локальных переменных, улучшения в Stream API (takeWhile,dropWhile) и фабрические методы для коллекций (List.of(),Set.of()).