单模块示例
- 目录结构
D:. +---mods \---src \---mod.test | module-info.java | \---com \---tomhex Main.java
- 源文件代码
/* FileName: module-info.java * Authour : tomhex * DateTime: 2022-02-18 14:09 **/ module mod.test{ }
/* FileName: Main.java * Authour : tomhex * DateTime: 2022-02-18 14:09 **/ package com.tomhex; public class Main{ public static void main(String[] args){ System.out.println("hello,moudle"); } }
- 编译运行
PS D:\java> javac --module-source-path src -d mods .\src\mod.test\com\tomhex\Main.java PS D:\java> java -p mods -m mod.test/com.tomhex.Main hello,moudle
- 运行后目录结构
D:. +---mods | \---mod.test | | module-info.class | | | \---com | \---tomhex | Main.class | \---src \---mod.test | module-info.java | \---com \---tomhex Main.java
多模块示例 (模块间引用)
- 目录结构
D:. +---mods \---src +---mod.hello | | module-info.java | | | \---com | \---hello | Hello.java | \---mod.main | module-info.java | \---com \---main Main.java
- 源文件代码
/* * FileName: src/mod.hello/module-info.java **/ module mod.hello{ //导出外部可见包 exports com.hello; }
/* * FileName: src/mod.hello/com/hello/Hello.java **/ package com.hello; public class Hello{ public SayHello(){ System.out.println("hello,moudle"); } }
/* * FileName: src/mod.main/module-info.java */ module mod.main{ //引用模块(注意不是包) requires mod.hello; }
/* *FileName: src/mod.main/com/main/Main.java **/ package com.main; import com.hello.Hello; public class Main{ public static void main(String[] args){ Hello h = new Hello(); h.SayHello(); } }
- 编译运行
PS D:\java> javac --module-source-path src -d mods src/mod.hello/com/hello/Hello.java src/mod.main/com/main/Main.java PS D:\java> java -p mods -m mod.main/com.main.Main hello,moudle
- 运行后目录结构
D:. +---mods | +---mod.hello | | | module-info.class | | | | | \---com | | \---hello | | Hello.class | | | \---mod.main | | module-info.class | | | \---com | \---main | Main.class | \---src +---mod.hello | | module-info.java | | | \---com | \---hello | Hello.java | \---mod.main | module-info.java | \---com \---main Main.java
小结
- 模块(module)是包的集合,一个模块下可以有多个包
- 引用某个模块里的包必须是那个模块里module-info.java里exports出来的包
- 个人见解,如有不对的地方,欢迎大家指正。