学习 Java Module(模块系统,JPMS,Java Platform Module System) 可以从「概念 → 语法 → 实践 → 工程化」逐步深入。下面给你一套清晰、可操作的学习路线。
在 Java 9 之前:
Java Module 的目标是:
✅ 明确依赖
✅ 控制可见性
✅ 支持按需裁剪(jlink)
✅ 提升安全性和可维护性
一个 有名字的、自描述的代码单元
包含:
module-info.javamodule com.example.demo {
requires java.base;
exports com.example.demo.api;
}
| 指令 | 作用 |
|---|---|
requires |
依赖其他模块 |
exports |
对外暴露包 |
opens |
允许反射 |
provides ... with |
SPI 实现 |
uses |
使用 SPI 接口 |
demo/
└── src/
└── com.example.demo/
├── module-info.java
└── com/example/demo/Main.java
module com.example.demo {
exports com.example.demo;
}
package com.example.demo;
public class Main {
public static void main(String[] args) {
System.out.println("Hello Module");
}
}
javac -d out src/com.example.demo/module-info.java src/com.example.demo/com/example/demo/Main.java
java --module-path out -m com.example.demo/com.example.demo.Main
✅ 成功说明你已入门 Module
exports vs 不导出| classpath | module path | |
|---|---|---|
| 可见性 | 全公开 | 严格 |
| 冲突 | 易 | 少 |
| 反射 | 随便 | 需 opens |
opens com.example.demo to spring.core;
opensInaccessibleObjectExceptionIllegal reflective access
Module X does not opens Y to Z
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<release>17</release>
</configuration>
</plugin>
parent
├── module-a
├── module-b
jlink --module-path $JAVA_HOME/jmods:out \
--add-modules com.example.demo \
--output myapp
✅ 不要一上来就全项目用 Module
✅ 先写 2–3 个 demo module
✅ 再尝试改造一个小项目
✅ 遇到问题先读错误栈(Module 错误很“直白”)
如果你愿意,我可以:
你更想从哪一块深入?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。