代码之家  ›  专栏  ›  技术社区  ›  Naman

列出应用程序启动期间解析的模块

  •  7
  • Naman  · 技术社区  · 7 年前

    在应用程序启动时,如何知道已解析的模块列表,以便确定哪些服务提供商可以从根模块访问。

    1 回复  |  直到 4 年前
        1
  •  7
  •   Naman    7 年前

    模块分辨率

    这个 module resolution 是一个两步过程。

    • 第一步递归枚举一组根模块的“requires”指令。
    • 如果所有枚举模块都是可观察的,则第二步计算其可读性图。可读性图体现了模块之间如何相互依赖,进而控制跨模块边界的访问。

    可以使用中提到的调试标志 java tool documentation 通过VM参数:

    --show-module-resolution
    

    显示启动期间的模块分辨率输出。

    For example ,选项将列出:

    • 根模块
    • 根模块需要并解决的所有模块
    • 上述所需模块使用的其他绑定,以及
    • 启动期间解决的连续模块

    运行以下命令时:

    Jigsaw git:(master) ✗ ../jdk-9.0.1.jdk/Contents/Home/bin/java 
                           --show-module-resolution 
                           -p ../out/production/100DaysOfJava9 
                           -m HundredDaysOfJavaNine/com.stackoverflow.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
    ...