下面用循序渐进的方式,带你从 0 入门 Java Module(JPMS,Java Platform Module System),适合已经会一点 Java(类、包、Maven)的人。
从 Java 9 开始,Java 引入了 Module System,主要解决:
✅ Module 的核心目标:
明确“我能用什么,我不能用什么”
比 package 更大一级的组织单位
一个 module =
module-info.java每个模块 必须有 一个:
module com.example.demo {
}
位置:
src/
└── com.example.demo/
├── module-info.java
└── com/example/demo/Main.java
module com.example.demo {
requires java.sql;
}
表示:
本模块需要使用 java.sql 模块
module com.example.demo {
exports com.example.demo.api;
}
表示:
只把
api包对外可见,其他包默认私有
mods/
└── com.example.hello/
├── module-info.java
└── com/example/hello/Hello.java
module com.example.hello {
exports com.example.hello;
}
package com.example.hello;
public class Hello {
public static void main(String[] args) {
System.out.println("Hello Module!");
}
}
javac -d out/com.example.hello \
mods/com.example.hello/module-info.java \
mods/com.example.hello/com/example/hello/Hello.java
java --module-path out \
--module com.example.hello/com.example.hello.Hello
输出:
Hello Module!
✅ 你已经完成了第一个 Java Module!
module com.example.service {
exports com.example.service;
}
module com.example.app {
requires com.example.service;
}
⚠️ 注意:
requires → 编译报错exports → 别的模块访问不到| 关键字 | 作用 |
|---|---|
requires |
依赖其他模块 |
exports |
暴露包 |
opens |
反射可见(框架常用) |
provides ... with |
SPI |
uses |
使用 SPI |
transitive |
传递依赖 |
✅ Module ≠ 构建工具
✅ Maven / Gradle 仍然管理依赖
现代做法:
Maven 示例(简化):
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<release>17</release>
</configuration>
</plugin>
❌ 忘记 module-info.java
❌ 只 requires 不 exports
❌ 用 classpath 思维理解 module
❌ 试图访问 JDK 内部类(sun.*)
module-info.java如果你愿意,我可以:
你现在是 Java 几?有没有现成项目?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。