Java模块系统新特性快速上手指南( 二 )
清单 1: com.inewday.mod1/module-info.java
module com.inewday.mod1 {exports com.inewday.package1;}
请注意 , 模块和它导出的包是不同的名称 。 此处我定义了导出包的模块 。
现在在这个路径上创建一个文件 , 在目录中包含module-info.java文件:/com.inewday.mod1/com/inewday/package1 。 将文件命名为Name.java 。 将清单2的内容写入其中 。
清单2 Name.java
package com.inewday.package1; public class Name {public String getIt() {return "Java Module World";}}
清单2将成为我们所依赖的类、包和模块 。
现在我来创建另一个与/com.inewday.mod1平行的目录 , 并叫做/com.inewday.mod2 。 在这个目录中 , 我来创建一个module-info.java模块定义 , 它导入我已经创建的模块 , 如清单3所示 。
清单 3: com.inewday.mod2/module-info.java
module com.inewday.mod2 {requires com.javaworld.mod1;}
清单3不言而喻 , 它定义了com.inewday.mod2模块 , 并引入/需要com.inewday.mod1 。
在/com.inewday.mod2目录下 , 创建类路径如下:/com.inewday.mod2/com/inewday/package2 。
现在在里面添加一个名为Hello.java的文件 。 使用清单4中提供的代码 。
清单 4 Hello.java
package com.inewday.package2; import com.inewday.package1.Name; public class Hello {public static void main(String[] args) {Name name = new Name();System.out.println("Hello " + name.getIt());}}
在清单4中 , 我们从定义包开始 , 然后导入com.inewday.package1.Name类 。 请注意 , 这些元素一如既往地发挥作用 。 这些模块已经改变了包在文件结构层(而不是代码层)可用的方式 。
类似地 , 您应该对代码本身很熟悉 。 它只是简单地创建一个类并对其调用一个方法来创建一个经典的“hello world”雷同示例 。
5.运行模块化Java示例
文章插图
第1步:创建接收编译器输出的目录 。 在项目的根目录中创建一个名为/target的目录 。 在其内部 , 分别为每个模块创建一个目录:/target/com.inewday.mod1和/target/com.inewday.mod2 。
第2步:编译依赖项模块 , 并将其输出到/target目录 。 在项目的根目录中 , 输入清单5中的命令 。 (假设已经安装了JDK 。 )
清单5:构建模块1
javac -d target/com.inewday.mod1 com.inewday.mod1/module-info.java com.inewday.mod1/com/inewday/package1/Name.java
这将导致源代码随其模块信息一起被构建 。
第3步:生成依赖模块 。 输入清单6中所示的命令 。
清单6:构建模块2
javac --module-path target -d target/com.inewday.mod2 com.inewday.mod2/module-info.java com.inewday.mod2/com/inewday/package2/Hello.java
请详细看看清单6 。 它将module-path参数引入到javac 。 这允许我们以类似于--class-path开关的方式定义模块路径 。 在本例中 , 我将传入target目录 , 因为清单5在该目录中输出模块1 。
接下来 , 清单6(通过-d开关)定义了模块2的输出目录 。 最后给出了编译的实际主题 , 即模块2中包含的module-info.java文件和类 。
为了运行程序 , 使用清单7中所示的命令 。
清单7:执行模块主类
java --module-path target -m com.inewday.mod2/com.inewday.package2.Hello
--module-path开关告诉Java使用/target目录作为模块根目录 , 也就是说 , 在哪里搜索模块 。 -m开关是告诉Java主类在什么地方 。 注意 , 我们在完全限定类名的前面加上它的模块 。
- vivo一款新机现身跑分网!运存和系统信息通通曝光
- 想实现《曼达洛人》的数字布景吗?索尼模块化屏幕即将开售
- 未来想进入AI领域,该学习Python还是Java大数据开发
- 人瑞人才(06919):未来3年系统平台将发力智能化,打造职业生态链平台
- 消费者报告 | 美团充电宝电量不足也扣费,是质量问题还是系统缺陷?
- 谷歌修复Pixel 5系统音量问题 快门音效不再吵
- Axiomtek推出AIE100-903-FL-NX AI Edge系统 可在恶劣环境下运行
- 官宣!11款vivo系机型开始公测最新系统OriginOS
- 鸿蒙OS大一统需产业合力
- 学习大数据是否需要学习JavaEE