java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > 初始JAVA模块化开发

初始JAVA模块化开发的超详细步骤(适合菜鸟)

作者:Wooden-Flute

这篇文章主要介绍了初始JAVA模块化开发的超详细步骤,详细解释了模块描述符的职责、模块路径的概念以及如何使用命令行运行模块化Java程序,文中通过图文介绍的非常详细,需要的朋友可以参考下

一、概述

这里讲解,如何使用IntelliJ IDEA创建一个简单的模块化Java应用。

这里需要知道,Intellij IDEA项目基本的构建单元也叫“模块(module)”,但这里的模块和JPMS中的“模块”不是一回事。Intellij中的模块是“构建单元”,它可以用于组织多种类型的开发资源。在实际开发中,可以使用Intellij模块来创建和生成JPMS模块。

二、创建步骤

1、打开Intellij IDEA,创建一个名为MyJavaModuleApp的Java项目。

每个IntelliJ IDEA 项目,都至少包容有一个模块,在本例中,最顶层的就是在这里起了名字的模块,可以将它看成是本项目的默认模块。

2、向示例项目中添加”模块描述符“文件

moduleinfo.java 文件应该位于IntelliJ 模块的 src 文件夹下。

module之后,跟着的就是模块名,由于所有 模块都位于一个全局命名空间中,因此,模块名称必须是唯一的,并且应该与模块文件夹的名字相同。

 3、创建多模块的IntelliJ 项目

向IntelliJ 项目添加新模块:

4、IntelliJ项目添加“新模块”对话框

从IntelliJ IDEA 的“ New Module ”对话窗口可以看出,它的“模块”,是广义的模块,在一个 IntelliJ IDEA 项目中,可以创建 N 种类型的“模块”。

创建IntelliJ 模块的过程,与创建一个 IntelliJ 项目的过程几乎一样,这也说明了,你可以把 IntelliJ 模块,看成是一个 IntelliJ 的“子项目”。 

模块创建好之后,采用与前面一样的方法,为新模块添加 module info.java 文件。

解释1:模块声明与模块描述符

解释2:模块化的jar包

5、给MyLibModule模块添加可复用的代码

向MyLibModule 模块中添加一个包,再添加一个类,然后里面写了一个 getInfo() 方法,返回一个“提示信息”。

模块化的应用中,所有的类,都应该归属于一个有名字的包。

6、修改MyLibModule模块的module info.java

在module info.java文件中,使用 exports 导出“ com.jinxuliang”包。

MyLibModule模块导出了一个包,此包中所有的公有类(本例为 MyPublicFunc现在就可以被其他模块所使用。简单地说,只要在 module info.java文件中导出一个包之后,包中所有声明为public 的类,就可以被外部所访问了。 

在模块化的Java 应用中,如果没有在 module info.java 文件中导出包,那么,包中的类即使被声明为 public ,外界也无法使用它。

总结一下模块描述符的职责:

所谓“模块描述符”,其实就是放在module info.java文件中的内容编译之后的结果(是一个 .class 文件), 它描述了模块相关的重要信息:

7、建立模块化之间的依赖关系

File---->Project Structure

 点击+

 选择3 模块依赖关系

点击确定

这里所建立好的依赖关系,其实是编译时的依赖关系,仅在编译时起作用。 

8、修改MyJavaModuleApp模块的module info.java

9、编写测试代码测试模块的调用

这里需要注意一个点,编写的测试代码也必须包含在一个软件包里面,否则无法运行。因为模块化的应用中,所有的类,都应该归属于一个有名字的包。

然后运行即可 

由于本模块使用requires关键字导入了 MyLibModule 模块,所以可以使用它所导出的MyPublicFunc 类。

三、模块路径的概念

给IntelliJ模块添加“模块依赖”时,其实是为了指定编译信息。真正的Java模块依赖信息,是放在module-info.java中的。

四、使用命令行运行模块后的Java程序

使用命令行运行模块实战演练

操作如图

像我的操作就是 

-m 是“ module ”的简写。

就可以运行成功。而要运行的MyFirstModuleApp.class所在的文件夹是这样的

 小结1:使用命令行运行模块化Java应用

小结2:Java模块编写的“基本准则” 

区别两个性 

可读性(readability):如果A requires B,我们就说:“模块B对于模块A来说,是可读的。读取其他模块意味着可以访问其导出包中的类型。”

可访问性:

默认情况下,模式可读性必须显示声明,不能传递

区分编译时和运行时

总结 

到此这篇关于初始JAVA模块化开发的文章就介绍到这了,更多相关初始JAVA模块化开发内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文