在 Java 9 及以后版本 中引入了 Java Platform Module System(JPMS,即 Java Module),用来替代传统的 classpath 机制,提供更强的封装和依赖管理。
下面从 概念 → 创建 → 使用 → 编译运行 → 常见问题 给你一个完整说明。
一个 Module 是一个有名字的代码单元,包含:
module-info.java(模块描述文件,必须)requires)exports)相比 classpath:
myapp/
└── src/
└── com.example.app/
├── module-info.java
└── com/example/app/Main.java
module com.example.app {
// 当前模块依赖的模块
requires java.base; // 默认就有,可省略
// 导出包,供其他模块使用
exports com.example.app;
}
package com.example.app;
public class Main {
public static void main(String[] args) {
System.out.println("Hello Module!");
}
}
javac \
-d out \
src/com.example.app/module-info.java \
src/com.example.app/com/example/app/Main.java
java \
--module-path out \
--module com.example.app/com.example.app.Main
输出:
Hello Module!
project/
├── src/
│ ├── com.example.service/
│ │ ├── module-info.java
│ │ └── com/example/service/Service.java
│ └── com.example.app/
│ ├── module-info.java
│ └── com/example/app/Main.java
// module-info.java
module com.example.service {
exports com.example.service;
}
package com.example.service;
public class Service {
public String hello() {
return "Hello from Service";
}
}
module com.example.app {
requires com.example.service;
}
package com.example.app;
import com.example.service.Service;
public class Main {
public static void main(String[] args) {
System.out.println(new Service().hello());
}
}
javac -d out $(find src -name "*.java")
java --module-path out --module com.example.app/com.example.app.Main
| 指令 | 作用 |
|---|---|
requires 模块名; |
依赖某模块 |
requires transitive 模块名; |
依赖并传递 |
exports 包名; |
导出包 |
exports 包名 to 模块A,模块B; |
限定导出 |
opens 包名; |
运行时反射开放 |
uses 接口; |
使用服务 |
provides 接口 with 实现; |
提供服务 |
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<release>17</release>
</configuration>
</plugin>
只需在 src/main/java/module-info.java 写模块信息。
❌ Package X is not visible
exportsrequires❌ Module not found
--module-path 路径错误❌ 反射失败
opens✅ 适合:
❌ 不适合:
如果你愿意,我可以:
你现在是想用在什么项目里?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。