代码之家  ›  专栏  ›  技术社区  ›  Rafael Winterhalter

将未导出/未打开的包添加到模块信息的模块包的用例是什么?

  •  5
  • Rafael Winterhalter  · 技术社区  · 6 年前

    这个 JVMS states in section 4.7.26 那就是:

    modulePackages属性表示由module属性导出或打开的模块的所有包,以及记录在module属性中的服务实现的所有包。modulePackages属性还可以指示模块中既没有导出也没有打开,也没有包含服务实现的包。

    在没有导出或打开的情况下,何时添加这样的包是有意义的?我看不出Java编译器一直在以这种方式添加包。

    我偶然发现了这个,因为asm也 offers a ModuleVisitor::visitPackage method .

    1 回复  |  直到 6 年前
        1
  •  1
  •   Rafael Winterhalter    6 年前

    根据艾伦·贝特曼的评论回答我自己的问题:

    这个 ModulePackages 属性是优化和可选的。如果存在该属性,则JVM可以通过简单地读取该属性来获取模块包的列表。如果不存在此属性,则必须扫描涉及I/O的JAR文件,因此不希望扫描。

    如果包列表不完整,运行时将无法从这些包中加载类,就像这些包不包含在JAR中一样。

    属性由 罐子 工具而不是 贾瓦克 .