面试知识点总结
1. 一篇文章说清 netty 的线程模型 2. 一篇说尽 java 线程池 3. 一篇就够了系列 - LinkedHashMap 4. 使用LinkedHashMap构建LRU的Cache 5. 并发编程之-Excutor框架 6. Java工具类提供的排序功能 7. Java的众多log库都是什么关系? 8. Java常用日志框架历史 9. 网页特殊符号(HTML字符实体)大全 10. JavaFX项目打包为独立的macOS应用程序和dmg文件 11. Java 11 支持的 基于 HTTP/2 的响应式请求 12. Java 11 中 HttpClient 的使用(HTTP/2协议) 13. Java 11 模块化入门教程 14. 五五面试网-带你 理解 java 模块系统 (一) 15. 五五面试网-带你 理解 java 模块系统 (二) 16. 五五面试网-带你 理解 java 模块系统 (三) 手动新建一个java模块 17. Java中的TreeMap 18. gradle:现代高效的java构建工具 19. Spring + MyBatis 框架下处理数据库异常 20. 通过开源项目,免费获取Idea的开源授权 21. IntelliJ IDEA 2020最新激活码(亲测有效,可激活至 2089 年)

五五面试网-带你 理解 java 模块系统 (三) 手动新建一个java模块

前提我们需要java版本为java 9 ,最好是java 14

1.新建一个类

首先创建一个类MainShi55,   包名为 chigua  ,结构如下:

55MianShi.Com #cat chigua/MianShi55.java 

package chigua;

public class MianShi55 {

    public static void main(String[] args) {

        System.out.println("Hello 55mianshi.com  55面试网");

    }

}

在前模块化时代,使用    jar 命令,打包为jar包,即可打包使用。

在后模块时代,moduel 模块才是 java世界的一等公民,直接使用jar 回显得无组织无纪律。

2.打包为一个模块

2.1编写模块声明文件

55MianShi.Com #cat module-info.java 

module chigua.mianshiff{

}

编译代码

55MianShi.Com #javac -version

javac 14.0.2

55MianShi.Com #java -version 

java version "14.0.2" 2020-07-14

Java(TM) SE Runtime Environment (build 14.0.2+12-46)

Java HotSpot(TM) 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)

#编译

55MianShi.Com # javac module-info.java chigua/MianShi55.java

打包为模块,如下命令,其中-class-path 指定类路径,最后一个参数为模块文件,可以随意命名。

jmod create -class-path .  mods/chigua.mianshiff.jmod
##jmod create -class-path java类文件根路径  模块文件名,一般已jmods结尾
##--main-class 参数可指定主类

3.引入一个java模块

前模块时代,将一个jar包加入classpath 即可引用其中的类,如何引用一个模块中的类,代码如下:

java  -m 参数指定要要运行的模块和类名   

java -m 模块:类名

java -p 模块所在路径

 

#先打印模块列表,检查模块是否被加载

xiaolong@localhost chigua % java --list-modules -p ./mods                    

java.base@14.0.2

java.compiler@14.0.2

...

...

jdk.xml.dom@14.0.2

jdk.zipfs@14.0.2

chigua.mianshiff 

 

#运行模块的类

55mianshi@localhost chigua % java -p ./  -m chigua.mianshiff/chigua.MianShi55 

Hello 55mianshi.com  55面试网

 

如果jmod  create 创建的时候,增加参数   --main-class  指定主类,模块运行的时候直接提供模块名即可。