JVMS states in section 4.7.26:
ModulePackages属性指示由Module属性导出或打开的模块的所有软件包,以及在Module属性中记录的服务实现的所有软件包。 ModulePackages属性还可以指示模块中未导出,未打开也不包含服务实现的包。
何时不导出或打开这样的软件包,添加有意义的软件包何时才有意义?我看不到Java编译器曾经以这种方式添加软件包。
由于ASM也offers a ModuleVisitor::visitPackage
method,我对此感到迷茫。
答案 0 :(得分:1)
根据艾伦·贝特曼(Alan Bateman)的评论回答我自己的问题:
ModulePackages
属性是一种优化并且是可选的。如果存在该属性,则JVM可以通过简单地读取此属性来获取模块软件包的列表。如果此属性不存在,则必须扫描涉及I / O的jar文件,因此是不希望的。
如果软件包列表不完整,则运行时将无法从这些软件包加载类,就像这些软件包未包含在jar中一样。
该属性是通过 jar 工具添加的,而不是通过 javac 添加的。