首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java.se模块在Java9中的意义是什么?

java.se模块在Java9中的意义是什么?
EN

Stack Overflow用户
提问于 2017-05-25 18:35:59
回答 2查看 884关注 0票数 7

为什么java9模块系统会有对其他模块有传递依赖的java.se模块。这不是和在Java9之前的世界中依赖整个rt.jar是一样的吗?

代码语言:javascript
运行
复制
module java.se {
    requires transitive java.desktop;
    requires transitive java.security.jgss;
    requires transitive java.security.sasl;
    requires transitive java.management;
    requires transitive java.logging;
    requires transitive java.datatransfer;
    requires transitive java.sql.rowset;
    requires transitive java.compiler;
    requires transitive java.sql;
    requires transitive java.naming;
    requires transitive java.prefs;
    requires transitive java.rmi;
    requires transitive java.xml.crypto;
    requires transitive java.management.rmi;
    requires transitive java.xml;
    requires transitive java.scripting;
    requires transitive java.instrument;
}
EN

回答 2

Stack Overflow用户

发布于 2017-05-25 19:51:11

据我所知,主要原因是与非模块化Java代码的兼容性。当编译或启动没有模块声明或描述符(定义其依赖项)的代码时,就会出现一个问题,即允许它“看到”JDK中的哪些模块。

如果这些都是JDK中的模块,那么Java模块将“掩盖”放在类路径上的任何Java实现。这是模块和类路径(最终出现在未命名模块中)之间交互的一个特性:如果一个包同时存在于常规模块和未命名模块中,则后者实际上是不可见的。

为了弥补这一事实,并不是所有模块对于类路径上的代码都是可见的。相反,模块解析(解析应用程序的依赖项)将从根模块java.se开始,从而忽略java.se模块。

有关更详细的解释,请查看this mail from Alan Bateman,他在其中解释了相应JEP 261的更改。

票数 10
EN

Stack Overflow用户

发布于 2017-05-26 12:41:00

java.se模块是Java9中应用程序可用的默认模块集(也称为“根模块”)。您是对的,java.se模块大约是旧JDK的rt.jar中的80% (如果您想要完整的rt.jar,请查看java.se.ee模块)。

Java9模块化的一个关键优势是新的jlink实用程序,它将把您的JDK“缩小”到只需要的模块。例如,假设您编写了一个非常简单的Java应用程序,该应用程序只依赖于java.base模块,并且希望以尽可能小的形式分发。您可以运行JDK实用程序来创建一个只包含java.base模块的jlink映像,因为这是您的应用程序运行所需的全部内容。

回到java.se模块,编写一个requires java.se的模块可能是愚蠢的,因为这将破坏jlink为该模块或任何其他依赖于它的模块创建漂亮的小型JDK镜像的可能性。在理想情况下,所有模块都声明它们所需的精确模块。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44178366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档