Java 平台模块系统中的 'java.se' 和 'java.base' 模块有什么区别
What's the difference between the 'java.se' and 'java.base' Module in Java Platform Modules System
我不确定我是否理解正确:java.base
是来自所有其他模块的底层基础模块,包含来自它们的所有基础内容,例如来自 [= 的 superclass 17=]。 java.se
是包含整个 JDK 的模块,就像一个 subclass(包含基本功能和更具体的东西)
java.base
是基础模块;每个其他模块都隐式或显式地依赖于它:
If the declaration of a module does not express a dependence on the java.base
module [...] then the module has an implicitly declared dependence on the java.base
module.
(Java Language Specification 17 §7.7.1)
java.se
“定义 Java SE 平台的 API”(根据文档)。它大致(?)包含模块化之前 Java SE 中存在的所有 classes,除了现在在不同的模块中分开,例如java.desktop
或 java.sql
。它不包括 JDK 个特定模块(例如 jdk.javadoc
)。 Java 运行时可能不一定提供所有这些模块;例如,您可以使用 jlink
创建一个 Java 运行时,它只包含您需要的模块(至少 java.base
)。
Java API 规范也有助于理解模块的内容及其关系:
您与 class(模块 java.base
)及其子 class(模块 java.se
)的比较在这种情况下有效,因为 java.se
表现得很好就像一个 'aggregator' 模块,它本身不包含或导出任何包,但仅通过 requires transitive
间接导出。请参阅 this question 以了解 java.se
模块存在的原因。虽然通常你不会声明对 java.se
的依赖,因为这违背了制作自定义小型运行时图像的目的;相反,您只会声明对您真正需要的特定模块的依赖性,例如java.logging
.
虽然这样的聚合器模块并不常见。在大多数情况下,模块更适合用于对相关包进行分组,并限制对内部实现的访问。但是,在这些情况下,由一个模块定义的服务和正在实现的相应服务提供者 declared by another module 与您的类比相似。
我不确定我是否理解正确:java.base
是来自所有其他模块的底层基础模块,包含来自它们的所有基础内容,例如来自 [= 的 superclass 17=]。 java.se
是包含整个 JDK 的模块,就像一个 subclass(包含基本功能和更具体的东西)
java.base
是基础模块;每个其他模块都隐式或显式地依赖于它:
If the declaration of a module does not express a dependence on the
java.base
module [...] then the module has an implicitly declared dependence on thejava.base
module.
(Java Language Specification 17 §7.7.1)
java.se
“定义 Java SE 平台的 API”(根据文档)。它大致(?)包含模块化之前 Java SE 中存在的所有 classes,除了现在在不同的模块中分开,例如java.desktop
或 java.sql
。它不包括 JDK 个特定模块(例如 jdk.javadoc
)。 Java 运行时可能不一定提供所有这些模块;例如,您可以使用 jlink
创建一个 Java 运行时,它只包含您需要的模块(至少 java.base
)。
Java API 规范也有助于理解模块的内容及其关系:
您与 class(模块 java.base
)及其子 class(模块 java.se
)的比较在这种情况下有效,因为 java.se
表现得很好就像一个 'aggregator' 模块,它本身不包含或导出任何包,但仅通过 requires transitive
间接导出。请参阅 this question 以了解 java.se
模块存在的原因。虽然通常你不会声明对 java.se
的依赖,因为这违背了制作自定义小型运行时图像的目的;相反,您只会声明对您真正需要的特定模块的依赖性,例如java.logging
.
虽然这样的聚合器模块并不常见。在大多数情况下,模块更适合用于对相关包进行分组,并限制对内部实现的访问。但是,在这些情况下,由一个模块定义的服务和正在实现的相应服务提供者 declared by another module 与您的类比相似。