JAVA-初始JAVA模块化开发

菜鸟为了巩固所写

目录

菜鸟为了巩固所写

一、概述

二、创建步骤

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

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

 3、创建多模块的IntelliJ 项目

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

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

解释2:模块化的jar包

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

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

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

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

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

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

三、模块路径的概念

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

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

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

小结2: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 项目添加新模块:

  • 一个 IntelliJ 项目可以包容多个模块,这在实际开发中非常常见。
  • 通常会将代码等相关资源按照“职责”进行分类和汇总,把密切相关的东西都放在一起,保存在某个模块中,然后,再建立起各个模块之间的依赖关系。
  • 达到一定规模的 Java 项目,不应该将所有的东西全部放在一个模块中。

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

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

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

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

  • 每个模块,都要有自己的module info.java 。
  • 模块名称必须是唯一的。 

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

  • moduleinfo.java 称为“ 模块声明( Module Declaration )文件 ”,它编译之后称为“ 模块描述符( Module Descriptor )。
  • 模块声明文件必须存在于模块目录的根目录中。它与其他源文件一起编译成一个名为 module info .class 的二进制类文件 。
  • 如果使用javac 一次性编译多模块的 Java 模块化项目 中,模块名称必须与包含模块描述符的目录名称相匹配。否则,编译器将拒绝编译并报告匹配错误。

解释2:模块化的jar包

  • 包容有模块描述符的 JAR 包,称为模块化 JAR 包 。
  • 模块描述符必须放在模块化JAR 包的根目录下,以方便 JPMS 识别。
  • 模块化JAR 可以当成普通的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

  • 使用 requires 语句导入本模块所需要调用的代码所在的模块。
  • 如果本模块中也有代码需要供给外界使用,则可以用 exports 语句导出。 

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

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

        然后运行即可 

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

三、模块路径的概念

  • 当编译和运行模块时,Java编译器和运行时使用模块描述符来解析正确的模块。模块是从模块路径(module path)中解析出来的,而不是类路径(class path)。类路径用于构建编译项目所需要用到的类型清单,而模块路径则可以看成是一个项目所引用的模块的清单。
  • java命令行有一个module-path参数,用于指定模块路径。
  • 当使用java命令运行一个模块时,它到模块路径中去查找所有模块,装载其模块描述符,通过读取模块描述符中给定的exports和requires等信息,就能构建出程序中用到的所有模块的依赖图。

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

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

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

        操作如图

        像我的操作就是 

        -m 是“ module ”的简写。

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

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

  • --module path ,简写为-p :代表依赖的模块保存的位置
  • --module ,简写为 -m: 表示要启动的初始模块,如果此模块中没有定义程序入口点,则可以采用“模块名 主类”的方式指定程序入口点。

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

区别两个性 

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

        可访问性:

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

区分编译时和运行时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值