自动模块 未命名模块 java_Java9模块化指南

4d2e9a80c3f7a28314ff03cf63e14f13.png

1. 概述

Java9在包之上引入了一个新的抽象级别,正式称为Java平台模块系统(JPMS),简称“模块”。

在本文中,我们将介绍新系统并讨论其各个方面。

2. 什么是模块?

首先,我们需要先了解模块是什么,然后才能了解如何使用它们。

模块是一组密切相关的包和资源以及一个新的模块描述符文件。

换句话说,它是一个“Java包的包”的抽象,允许我们使代码更加可重用。

2.1 Packages

模块中的包与我们自Java诞生以来一直使用的Java包是相同的。

当我们创建一个模块时,我们将代码内部组织在包中,就像我们以前对任何其他项目所做的那样。

除了组织我们的代码外,还使用包来确定哪些代码可以在模块外部公开访问。我们将在本文后面花更多的时间讨论这个问题。

2.2 Resources

每个模块负责其资源,如媒体或配置文件。

以前,我们将所有资源放在项目的根级别,并手动管理属于应用程序不同部分的资源。

通过模块,我们可以将所需的图像和XML文件与需要的模块一起发送,从而使我们的项目更易于管理。

2.3 模块描述符

创建模块时,我们会包含一个描述符文件,该文件定义了新模块的几个方面:

Name–我们模块的名称依赖项–此模块依赖的其他模块的列表公共包–我们希望从模块外部访问的所有包的列表提供的服务–我们可以提供其他模块可以使用的服务实现已使用的服务–允许当前模块成为服务的使用者反射权限–显式允许其他类使用反射来访问包的私有成员模块命名规则类似于我们命名包的方式(允许点,不允许破折号)。两种项目风格都很常见(我的模块)或反向DNS(com.baeldung.mymodule)样式名称。我们将在本指南中使用项目样式。

我们需要列出所有想要公开的包,因为默认情况下所有包都是模块私有的。

反射也是如此。默认情况下,我们不能对从另一个模块导入的类使用反射。

在本文的后面,我们将查看如何使用模块描述符文件的示例。

2.4 模块类型

新模块系统中有四种类型的模块:

系统模块–这些是我们运行上面的list Modules命令时列出的模块。它们包括javase和JDK模块。应用程序模块–这些模块是我们决定使用模块时通常要构建的。它们在编译模块中命名和定义-信息类包含在组合JAR中的文件。自动模块–我们可以通过将现有JAR文件添加到模块路径来包含非官方模块。模块的名称将从JAR的名称派生。自动模块将对路径加载的每个其他模块具有完全读取权限。未命名模块–当类或JAR加载到类路径而不是模块路径时,它会自动添加到未命名模块。它是一个catch-all模块,用于保持与以前编写的Java代码的向后兼容性。2.5 分配

模块可以以两种方式之一分发:作为JAR文件或作为“分解”编译项目。当然,这与任何其他Java项目都是一样的,所以这并不奇怪。

我们可以创建由一个“主应用程序”和几个库模块组成的多模块项目。

但是我们必须小心,因为每个JAR文件只能有一个模块。

在设置构建文件时,我们需要确保将项目中的每个模块打包为一个单独的jar。

3. 默认模块

当我们安装Java9时,我们可以看到JDK现在有了一个新的结构。

他们把所有的原始软件包都搬进了新的模块系统。

我们可以在命令行中键入以下模块:

java --list-modules这些模块分为四大类:java、javafx、jdk和Oracle。

java模块是核心SE语言规范的实现类。javafx模块是fxui库。JDK模块本身需要什么就保存什么。最后,任何特定于Oracle的内容都在Oracle模块中。4. 模块声明

要设置模块,我们需要在名为module的包的根目录下放置一个特殊module-info.j

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值