在 Java 9+ 中引入了 Java Module System(JPMS),模块化的核心就是 module-info.java。下面我从 是什么 → 怎么写 → 完整示例 → 常见规则 给你讲清楚。
Java Module = 一组强封装的包 + 明确的依赖声明
✅ 明确导出哪些包
✅ 明确依赖哪些模块
✅ 强封装(不导出的包外部不能访问)
src
└── main
└── java
├── module-info.java
└── com.example.hello
└── Hello.java
module com.example.hello {
exports com.example.hello;
}
✅ module 模块名
✅ exports 包名:允许别的模块访问
package com.example.hello;
public class Hello {
public static void main(String[] args) {
System.out.println("Hello Module");
}
}
如果模块 A 使用模块 B:
module com.example.util {
exports com.example.util;
}
module com.example.app {
requires com.example.util;
}
project
├── app
│ └── src/main/java
│ ├── module-info.java
│ └── com.example.app.App.java
└── util
└── src/main/java
├── module-info.java
└── com.example.util.StringUtil.java
// module-info.java
module com.example.util {
exports com.example.util;
}
package com.example.util;
public class StringUtil {
public static String upper(String s) {
return s.toUpperCase();
}
}
// module-info.java
module com.example.app {
requires com.example.util;
}
package com.example.app;
import com.example.util.StringUtil;
public class App {
public static void main(String[] args) {
System.out.println(StringUtil.upper("hello"));
}
}
| 指令 | 作用 |
|---|---|
exports 包 |
导出包 |
requires 模块 |
依赖模块 |
requires transitive 模块 |
依赖传递 |
opens 包 |
允许反射 |
opens 包 to 模块 |
只允许指定模块反射 |
uses 接口 |
使用服务 |
provides 接口 with 实现 |
提供服务 |
❗ Java Module 默认禁止反射
如果你用 Spring / Hibernate:
opens com.example.app to spring.core;
或简单粗暴(仅学习用):
open module com.example.app {
requires com.example.util;
}
javac -d out --module-source-path src $(find src -name "*.java")
java --module-path out -m com.example.app/com.example.app.App
(实际项目一般用 Maven / Gradle)
✅ JDK 内部模块(java.base 等)
✅ 大型项目 / 库
✅ 强封装需求
❌ 小型项目、普通应用(可以不急着用)
Java Module = module-info.java 里声明 exports + requires
如果你愿意,我可以:
你现在是 学习阶段 还是 实际项目用?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。