java - Java 9 中创建了多少个未命名的模块?

标签 java java-9 java-module java-platform-module-system unnamed-module

我正在尝试了解 JPMS 的工作原理。

来自 here

The classpath is not completely gone yet. All JARs (modular or not) and classes on the classpath will be contained in the Unnamed Module. Similar to automatic modules, it exports all packages and reads all other modules. But it does not have a name, obviously. For that reason, it cannot be required and read by named application modules. The unnamed module in turn can access all other modules.

请注意...类路径上的将包含在未命名模块中。模块是单数的。

来自 here

For compatibility, all code on the classpath is packaged up as a special unnamed module, with no hidden packages and full access to the whole JDK.

再次未命名的模块。模块是单数的。

我是否理解在 JPMS 中总是只有一个未命名的模块?这是否意味着在 Java9 之前开发且未针对 Java9 更新的应用程序将作为一个未命名的模块加载?

最佳答案

Do I understand right that there is always only one unnamed module in JPMS?

简而言之

一般来说,不会。但是让我们这样说吧:如果您将一些甚至所有 JAR 放在类路径上,并且您的应用程序没有创建类加载器来加载任何额外的内容,那么您只需要关心一个未命名的模块。

更详细的

每个 ClassLoader 都有 its own unnamed module它用来表示从类路径加载的类。这是必要的,因为模块系统要求所有东西都在一个模块中。

作为 nullpointer's answer详细解释,默认情况下,应用程序将使用三个单独的类加载器。它可能会启动自己的类加载器,例如加载插件。但是,如果它不这样做,那么所有应用程序代码都将最终出现在系统/应用程序类加载器中,因此会出现在同一个未命名的模块中。这就是为什么您通常只需要关心一个。

Does it mean that applications that were developed before Java9 and not updated for Java9 will be loaded as one unnamed module?

这与代码(应用程序、框架、库)是否针对 Java 9 无关——它只取决于您放置 JAR 的路径、类路径或 module path .

如果它在类路径上,它会与其他类路径内容一起出现在未命名的模块中。这适用于没有模块描述符的普通 JAR,但也适用于包含模块描述符的模块化 JAR。

如果它在模块路径上,它会获得自己的模块。如果它是一个模块化 JAR,它会得到一个显式模块 those described throughout the State of the Module System - 普通的 JAR 变成了 automatic modules (注意复数:每个 JAR 一个自动模块)。

关于java - Java 9 中创建了多少个未命名的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46263256/

相关文章:

java - 现实世界的 Spring 。你真的通过 bean 定义注入(inject)原始值吗?

java - Payara 5 与 Java 9 的兼容性

javac --add-modules 添加多个模块

java - Docker 和 Java 9 模块

java - 从 Java 9 向进程发送信号

java - Netbeans Swing GUI Builder 无法与 java 模块项目和 Maven 一起使用

java - 为什么要从 Java 模块打开一个不存在的包?

java - 将 JTable 编辑保存到二维数组

java - java中的数组保存在内存中的什么位置?

java - 关于 while 循环的问题以及如何重新提出 y/n 问题