当我尝试导入javax.swing.JFrame
时,eclipse会抱怨,因为我需要明确告诉我的包我将从java.desktop
模块导入内容。所以我将requires java.desktop
放在我的module-info.java
中,然后java编译器知道链接java.desktop
的内容。我也可以将requires java.base
放在我的module-info.java
中。但似乎没有必要。我可以不使用它。
eclipse是否在幕后给我的javac
选项添加了一些酱料?javac
是否自动要求java.base
?为什么我不需要要求java.base
?如果这是编译器的魔力,是否还有其他这样的特权模块自动链接到我的包中?
使用jdk-14,但不确定是否相关。
2条答案
按热度按时间hmae6n7t1#
这在JLS 7.7.1中有规定:
7.7.1.依赖关系
requires指令指定当前模块依赖的模块的名称。
requires指令不能出现在java.base模块的声明中,否则会发生编译时错误,因为它是原始模块,没有依赖关系(参见8.1.4节)。
如果模块的声明不表示对java.base模块的依赖关系,并且该模块本身不是java.base,则该模块对java.base模块具有隐式声明的依赖关系。
这类似于
java.lang
包中的类被隐式导入到源文件中,模块不需要显式声明它们依赖于java.base
模块。qyuhtwio2#
这是因为JVM提供的所有平台模块都是可观察的模块。默认情况下,如果您正在创建模块,则不需要这些平台模块。这些模块导出的包可以导入,而无需在www.example.com文件中使用任何require指令module-info.java。您可以使用此命令获取可观察/平台模块的列表。