Список модулей, решенных во время запуска приложения
Как узнать список модулей, которые были разрешены во время запуска приложения, чтобы выяснить, какие все поставщики услуг доступны из корневого модуля.
1 ответ
Решение
Разрешение модуля
Разрешение модуля состоит из двух этапов.
- Первый шаг рекурсивно перечисляет директивы require набора корневых модулей.
- Если все перечисленные модули являются наблюдаемыми, то на втором этапе вычисляется график их читабельности. График читаемости показывает, как модули зависят друг от друга, что в свою очередь контролирует доступ через границы модуля.
Можно использовать флаг отладки, как указано в java
документация по инструменту с помощью аргумента VM:
--show-module-resolution
Показывает разрешение модуля вывода при запуске.
Например, опция будет перечислять:
- корневой модуль
- все модули, необходимые и разрешенные корневым модулем
- дополнительные привязки, используемые вышеуказанными необходимыми модулями и
- последовательные модули разрешены во время запуска
При запуске следующей команды:
Jigsaw git:(master) ✗ ../jdk-9.0.1.jdk/Contents/Home/bin/java --show-module-resolution -p ../out/production/100DaysOfJava9 -m HundredDaysOfJavaNine/com.stackru.nullpointer.Challenge1
Это приводит к следующему:
root HundredDaysOfJavaNine file:///.../out/production/100DaysOfJava9/
HundredDaysOfJavaNine requires jdk.incubator.httpclient jrt:/jdk.incubator.httpclient
java.base binds jdk.localedata jrt:/jdk.localedata
java.base binds java.security.jgss jrt:/java.security.jgss
java.base binds java.logging jrt:/java.logging
java.base binds jdk.javadoc jrt:/jdk.javadoc
java.base binds jdk.jartool jrt:/jdk.jartool
java.base binds jdk.jlink jrt:/jdk.jlink
java.base binds jdk.compiler jrt:/jdk.compiler
java.base binds jdk.jdeps jrt:/jdk.jdeps
java.base binds java.desktop jrt:/java.desktop
java.base binds jdk.zipfs jrt:/jdk.zipfs
...