命名模块的未命名包中的非编译单元是否打开?

Are non-compilation units in the unnamed package of a named module open?

我在 JLS 中找不到任何提及,它只谈到编译单元在未命名包中时如何放置在未命名模块中。

背景:许多库要求用户代码将具有特定名称的配置文件放入未命名(默认)包中。我想知道 JLS 是否保证在使用模块时可以通过 ClassLoader::getSystemResourceAsStream 找到这些资源。好像可以,不过我想有源码。

这是有道理的,因为 opens "" 没有语法,所以唯一明确的方法是打开模块本身。

我觉得已经很清楚了。

An unnamed module exports every package whose ordinary compilation units are associated with that unnamed module.

An unnamed module opens every package whose ordinary compilation units are associated with that unnamed module.

关于协会:

The host system must associate ordinary compilation units in an unnamed package with an unnamed module (§7.7.5), not a named module.

Source

注意:这里说的是导出包,不是导出编译单元,所以包中的资源都在这个声明中。