在 Java 9+ 的 Module System(JPMS,Java Platform Module System) 中,“模块依赖”是通过 module-info.java 来声明的。下面从基础到常见场景给你讲清楚。
一个模块就是一个 包含 module-info.java 的 jar 或目录。
com.example.foo
├── module-info.java
└── com/example/foo/...
module com.example.app {
requires com.example.service;
}
表示:
com.example.app 模块com.example.service 模块⚠️ 只能依赖已导出的包
module com.example.service {
exports com.example.service.api;
}
exports 的包,其他模块才能 requires 后使用requires transitive(传递依赖)module com.example.service {
requires transitive com.example.util;
}
效果:
requires com.example.servicecom.example.util✅ 适合“API 中用到别的模块类型”的情况
requires static(编译期依赖)requires static com.example.optional;
✅ 用于可选依赖(如日志实现)
exports ... to(限定导出)exports com.example.internal to com.example.test;
✅ 提高封装性
javac -d out \
--module-path libs \
module-info.java ...
java --module-path libs \
--module com.example.app/com.example.app.Main
JDK 本身也是模块:
module com.example.app {
requires java.sql;
requires java.logging;
}
❌ Module not found
module-path 没包含 jarmodule-info.java 且未自动模块化java -cp libs/xxx.jar ...
--module-path libs
MANIFEST.MF 或文件名)app/
├── module-info.java
└── com/example/app/Main.java
service/
├── module-info.java
└── com/example/service/api/Service.java
app/module-info.java
module com.example.app {
requires com.example.service;
}
service/module-info.java
module com.example.service {
exports com.example.service.api;
}
Java 模块依赖 =
requires+exports+module-path
如果你愿意,可以告诉我:
我可以直接给你可跑的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。