专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java 9揭秘-模块依赖(十二)(java9模块化为啥没大规模使用)

temp10 2024-09-11 09:15:57 java教程 8 ℃ 0 评论

自动模块

Java 9揭秘-模块依赖(十二)(java9模块化为啥没大规模使用)

为了向后兼容,查找类型的类路径机制仍然可以在Java 9中使用。可以选择将JARs放在类路径,模块路径和两者的组合上。 请注意,可以在模块路径和类路径上放置模块化JARs以及JARs。

当你将一个JAR放在模块路径上时,JAR被视为一个模块,称为自动模块(automatic module)。 被称为自动模块是因为模块信息自动定义的事实得出的,不是通过添加module-info.class文件来显式声明模块。 自动模块有一个名称。 自动模块的名称是什么? 它读取哪些模块以及导出哪些软件包?

自动模块其实也是一个有命名模块。 其模块名称和版本由JAR文件的名称派生,对应以下规则:

  • 删除JAR文件的.jar扩展名。 如果JAR文件名是com.jdojo.intro-1.0.jar,则此步骤将删除.jar扩展名,并通过以下步骤使用com.jdojo.intro-1.0来推导出模块的名称及其版本。

  • 如果名称以连字符后跟至少一个数字(也可后跟一个点),则模块名称将从最后一个连字符之前的名称部分派生。 如果它可以被解析为有效的版本,连字符后面的部分被分配为模块的版本。 在此示例中,模块名称将从com.jdojo.intro派生。 版本将派生为1.0。

  • 名称部分中的每个非字母数字字符都被替换为一个点,并且在所得到的字符串中,用一个点替换两个连续的点。 此外,所有前导和后跟的点都被删除。 在本示例中,我们在名称部分中没有任何非字母数字字符,因此模块名称为com.jdojo.intro。

按顺序应用这些规则可以提供模块名称和模块版本。 在本节结尾处,展示如何使用JAR文件确定自动模块的名称。 下面列出了几个JAR名称,以及派生的自动模块名称和版本。 请注意,该表不显示JAR文件名中的扩展名.jar。

我们来看看表中的三个奇怪的情况,如果你将JAR放在模块路径中,你会收到一个错误。 生成错误的第一个JAR名称是jdojo-logging1.5.0。 让我们应用规则来导出此JAR的自动模块名称:

  • JAR名称中没有连字符,后面紧跟着一个数字,所以没有模块版本。 整个JAR名称用于导出自动模块名称。

  • 所有非字母数字字符都被替换为一个点。 生成的字符串是jdojo.logging1.5.0。 模块名称的每个部分都必须是有效的Java标识符。 在这种情况下,5和0是模块名称中的两个部分,它们不是有效的Java标识符。 因此,派生模块名称无效。 这是在将此JAR文件添加到模块路径时收到错误的原因。

生成错误的另一个JAR名称是jdojo-trans-api_1.5_spec-1.0.0。 我们来应用规则来推导出这个JAR的自动模块名称:

  • 找到最后一个连字符,之后只有数字和点,并将JAR名称分为两部分:jdojo-trans-api_1.5_spec和1.0.0。 第一部分用于派生模块名称。 第二部分是模块版本。

  • 名称部分中的所有非字母数字字符都将替换为一个点。 生成的字符串是jdojo.trans.api.1.5.spec,它是一个无效的模块名称,因为1和5并且不是有效的Java标识符。 这是在将此JAR文件添加到模块路径时收到错误的原因。

表中的最后一个条目包含一个下划线(-)作为JAR名称。 也就是说,JAR文件被命名为-.jar。 如果应用规则,下划线将被一个点替换,并且该点将被删除,因为它是名称中唯一的字符。 最后一个空字符串,这不是一个有效的模块名称。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表