Запустить инструмент анализа зависимостей классов Java (JDeps)

В Java 8 и более поздних версиях JDK поставляется с утилитой командной строки jdeps (анализатором зависимостей классов Java). Команда jdeps анализирует зависимости классов и предоставляет дополнительные параметры, позволяющие отметить внутренние пакеты JDK. Хотя WebSphere Migration Tool находит большинство проблем миграции в приложении, инструмент jdeps полезен для более точного обнаружения внутренних пакетов JDK, которые станут недоступны после миграции на новую версию Java.

Команду jdeps рекомендуется запускать после устранения проблем, найденных инструментом WebSphere Migration Tool для исходного или двоичного кода. Обработайте артефакты Java приложения с помощью команды jdeps. Для получения наиболее полных результатов используйте команду jdeps из планового целевого выпуска JDK, например JDK 11, указав параметр -jdkinternals. Например, настройте среду для использования Java 11 и вызовите следующую команду:

jdeps -jdkinternals C:\demo\Apps\myapplication.jar

Начиная с версии Java 9 предпринимаются усилия по ограничению доступа к большинству внутренних элементов JDK. Тем не менее, в целях упрощения миграции эта строгая инкапсуляция была по умолчанию выключена для API, которые существовали в Java 8. Начиная с версии Java 16, значением по умолчанию для опции запуска --illegal-access является deny, а не permit. Хотя это и не рекомендуется, данное ограничение можно было обойти в Java 16, указав опцию --illegal-access=permit. Если в качестве значения --illegal-access указать warn или debug, то эффект будет такой же, как от значения permit, однако для недопустимых операций доступа посредством рефлексии будут выдаваться предупреждения (в случае значения warn) или добавляться трассировка стека (в случае значения debug).

При миграции на Java 17 и более новые версии опция --illegal-access будет считаться устаревшей. Большинство внутренних элементов JDK теперь имеют строгую инкапсуляцию. Хотя это не рекомендуется, данное ограничение можно обойти, указав опцию запуска --add-opens или атрибут Add-Opens в манифесте JAR, чтобы открывать отдельные пакеты, требуемые вашим приложением или сторонними библиотеками.

Хотя некоторые наиболее важные внутренние API не инкапсулированы, это изменение затрагивает следующее:

В выводе утилиты будут указаны ссылки на внутренние классы JDK и те API, на которые их рекомендуется заменить (при наличии). Примечание: на вход команды jdeps можно передавать только файлы .class, каталог или файл JAR.

За дополнительной информацией о команде jdeps обратитесь на страницу справки по jdeps.