Ответ
В большинстве случаев — да, благодаря обратной совместимости JVM. Но есть критические исключения, которые могут вызвать ошибки.
Основные причины проблем при миграции с Java 8 на 17:
- Удалённые API: Некоторые внутренние и устаревшие (deprecated) API были окончательно удалены.
// Java 8: Работает // Java 17: java.lang.UnsupportedOperationException sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder(); - Модульная система (Project Jigsaw): Доступ к внутренним API модулей JDK (например,
com.sun.*) теперь ограничен. Требуются явные разрешения вmodule-info.java. - Устаревшие флаги JVM: Некоторые флаги виртуальной машины были удалены.
- Изменения в поведении: Некоторые методы, например, в коллекциях, могут вести себя строже.
Рекомендуемые действия перед миграцией:
- Запустите
jdeprscanдля поиска использования устаревших API в вашем коде и библиотеках. - Обновите все зависимости до версий, совместимых с Java 17.
- Протестируйте приложение с флагом
--illegal-access=warn, чтобы найти проблемы с рефлексивным доступом. - Используйте
jlinkилиjpackageдля создания модульного приложения.