Java中的模块(Module)入门介绍
Posted 软件开发技术爱好者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的模块(Module)入门介绍相关的知识,希望对你有一定的参考价值。
Java中的模块(Module)入门介绍
在Java 9版本中Java 语言引入了一个非常重要的概念:模块(module)。module引入了Java代码分组的另一个级别。每个module都包含许多子package(包)。模块是一组密切相关的包和资源以及一个新的模块描述符文件。
【Java和Python中的包和模块
Python模块(Modules),本质上是一个Python程序,以.py作为文件后缀。任何py文件都可以作为一个模块(Modules)。通过使用模块,不仅可以有效地避免命名空间的冲突,还可以将一个较大的程序分为多个文件,提升代码的可维护性和可重用性。
Python包(Package)的概念,特别在稍大型的项目中常常需要编写、用到大量的模块,此时可以使用包(Package)来管理这些模块,它实质上是一个目录(directory)。
Java文件是按照Java包的结构组织起来的,Java中的包通常包含相关的类,映射的实体概念是目录(directory),Java文件对应的目录结构层次要和包的结构层次一致。编译后的.class文件也需要按照包结构存放。Java 9 引入的模块(Module)是在Java包(package)的基础上又引入的一个新的抽象层。
关于Java中的包可参见 https://blog.csdn.net/cnds123/article/details/80446981】
Java中的package是Java中的基本组织单位, 每个包中包含Java类和接口文件。Java 9 引入的模块(Module)是在Java包(package)的基础上又引入的一个新的抽象层,是一组唯一命名(uniquely named)、可重用的相关包(packages)、资源(如图像和XML文件)和一个模块描述符(module descriptor)。模块类似于jar文件,因为两者都是一组包。两者之间的区别在于,模块包含元数据,即配置信息。模块的配置信息在一个名为 module-info.java 的特殊文件中指定。
模块描述符包含以下信息:
模块的名字——模块名称的声明
模块的依赖关系
它显式地向其他模块提供的包
它提供的服务
它所使用的服务
允许反射到的其他模块
模块名称的声明
一个模块的自描述表现在它的模块声明中,它是java程序语言中的一个新的结构,最简单的可能的模块声明仅仅是指定模块的名字,如:
module com.foo.bar
其中,com.foo.bar是模块名称。
使用模块化编程的一个java项目通常含三个子目录:lib,mods和src,其中src目录用于保存源代码; mods目录将已编译的代码保存在展开的目录层次结构中;在编译源代码之后,将其打包成一个模块化的JAR并将其存储在lib目录中。 可以使用模块化JAR来运行程序,也可以将模块JAR提供给可以运行程序的其他开发人员。
下面是含有两个模块“ common.widget”和“ data.widget”的项目示意,放置在文件夹“src”下。文件“ module-info.java”将放置在每个模块的根文件夹下。
其文件及目录格式示意如下:
模块命名规则类似于我们命名包的方式(允许点)。模块名外观和包名类似, 但和包不同,模块并不保存在对应的目录下,而是保存在与模块同名的目录下,比如common.widget模块保存在common.widget目录下,而不是common\\widget目录下。模块名需要和所在的子目录同名的吗?建议相同(方便用javac编译多个模块,将有一些选项可一次编译多个模块的源代码)但非必须。上图示例中相同。
模块名和包名需要相同吗?否, 也可以选择所需的任何其他包名称。上图示例中就不相同,下面的例子模块名和包名称相同。
模块之间关系:可读性,使用Requires、Exports表示,更多情况可见https://www.cnblogs.com/zimug/p/13855837.html
下面给出一个使用模块的简单例子
改编自 https://www.runoob.com/java/java9-module-system.html
创建一个 com.test 的模块。
第一步
创建文件夹 D:\\>JAVA\\src,然后在该目录下再创建与模块名相同的文件夹 com.test。
第二步
在 D:\\>JAVA\\src\\com.test 目录下创建 module-info.java 文件,代码如下:
module com.test
这一步我们创建了 com.test 模块。
第三步
在模块中添加源代码文件,在目录 D:\\>JAVA\\src\\com.test\\com\\test 中创建文件 Java9Tester.java,代码如下:
package com.test;
public class Java9Tester
public static void main(String[] args)
System.out.println("Hello World!");
第四步
创建文件夹 D:\\>JAVA\\mods,然后在该目录下创建 com.test 文件夹,编译模块到这个目录下。操作如下:
打开cmd,先使用cd /d D:\\JAVA,切换到D:\\JAVA目录,再输入如下命令编译模块
javac -d mods/com.test src/com.test/module-info.java src/com.test/com/test/Java9Tester.java
第五步
执行模块,输入如下命令查看输出结果:
java --module-path mods -m com.test/com.test.Java9Tester
其中,module-path 指定了模块所在的路径。
-m 指定主要模块。
输出:
Hello World!
第四步和第五步,可参见下图:
此示例比较简单,目的是让新手对如何使用模块有个感性认识。
进一步学习
https://www.jb51.net/article/242134.htm
Java基础-模块系统笔记(1) - SegmentFault 思否
Java 9 揭秘(2. 模块化系统) - 林本托 - 博客园
Java 9 揭秘(3. 创建你的第一个模块) - 林本托 - 博客园
以上是关于Java中的模块(Module)入门介绍的主要内容,如果未能解决你的问题,请参考以下文章
Node.js入门 03:模块化规范 CommonJS 与 ES Module