在 Java 9 及以后版本中,Java Module(模块) 是通过 Module System(Project Jigsaw) 引入的。下面我用从零开始的方式,带你一步步创建一个 Java Module。
Java Module 用于明确声明模块之间的依赖关系,主要解决:
每个模块都有自己的:
module-info.java每个模块必须有一个:
module-info.java
它通常放在源代码根目录。
module-demo
│
├── src
│ ├── com.example.hello
│ │ ├── module-info.java
│ │ └── com
│ │ └── example
│ │ └── hello
│ │ └── Hello.java
│ │
│ └── com.example.main
│ ├── module-info.java
│ └── com
│ └── example
│ └── main
│ └── Main.java
com.example.hello 模块Hello.java
package com.example.hello;
public class Hello {
public static String say() {
return "Hello Module";
}
}
module-info.java
module com.example.hello {
exports com.example.hello;
}
com.example.main 模块Main.java
package com.example.main;
import com.example.hello.Hello;
public class Main {
public static void main(String[] args) {
System.out.println(Hello.say());
}
}
module-info.java
module com.example.main {
requires com.example.hello;
}
com.example.hellojavac \
-d out/com.example.hello \
src/com.example.hello/module-info.java \
src/com.example.hello/com/example/hello/Hello.java
com.example.mainjavac \
-p out/com.example.hello \
-d out/com.example.main \
src/com.example.main/module-info.java \
src/com.example.main/com/example/main/Main.java
java \
-p out/com.example.hello:out/com.example.main \
-m com.example.main/com.example.main.Main
✅ 输出:
Hello Module
module-info.java 指令| 指令 | 作用 |
|---|---|
exports 包名 |
导出包供其他模块使用 |
requires 模块名 |
依赖某个模块 |
requires transitive 模块名 |
传递依赖 |
opens 包名 |
允许反射访问 |
uses 接口 |
使用服务 |
provides 接口 with 实现 |
提供服务 |
| 对比 | classpath | module-path |
|---|---|---|
| 依赖 | 隐式 | 显式 |
| 可见性 | 全部可见 | 仅导出 |
| 封装 | 弱 | 强 |
❌ 忘记 exports
package is not visible
❌ requires 写错模块名
模块名 ≠ 包名
❌ module-info.java 放错目录
Java Module = module-info.java + 明确依赖 + 导出包
如果你愿意,我可以:
你现在是 学习模块化原理,还是 实际项目迁移?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。