在 Java 9+ 中引入了 Module System(JPMS,Java Platform Module System),通过 module-info.java 来配置模块。下面从基本概念 → 配置方式 → 常见示例给你讲清楚。
一个 Module(模块) 是一个有边界的包集合,明确声明:
my-module/
├── src/
│ └── com.example.mymodule/
│ ├── module-info.java
│ └── com/example/mymodule/
│ └── Main.java
└── out/
module com.example.mymodule {
}
⚠️ 注意:
module-info.java 必须放在 源代码根目录只有导出的包,才能被其他模块访问。
module com.example.mymodule {
exports com.example.mymodule.api;
}
❌ 未导出的包,其他模块 不可见
module com.example.mymodule {
requires com.example.othermodule;
}
requires transitive com.example.othermodule;
依赖你的模块,也会自动依赖
othermodule
requires static com.example.optional;
编译时需要,运行时可以没有
opens com.example.mymodule.internal;
或只针对某个模块:
opens com.example.mymodule.internal to com.example.test;
✅ 用于:
module com.example.service {
uses com.example.spi.Service;
}
module com.example.impl {
provides com.example.spi.Service
with com.example.impl.ServiceImpl;
}
module com.example.api {
exports com.example.api;
}
module com.example.impl {
requires com.example.api;
exports com.example.impl;
}
module com.example.app {
requires com.example.api;
requires com.example.impl;
}
javac -d out \
src/com.example.api/module-info.java \
src/com.example.api/com/example/api/*.java
java --module-path out -m com.example.app/com.example.app.Main
Maven 项目结构:
parent
├── module-api
├── module-impl
└── module-app
每个模块:
<module>module-api</module>
并在代码中正常使用 module-info.java
❌ 没有 exports → 类找不到
❌ 没有 requires → 编译错误
❌ 反射失败 → 加 opens
❌ JDK 老版本(<9)不支持 module
✅ 大型项目
✅ 微服务核心库
✅ 强封装需求
❌ 小工具、脚本项目(没必要)
如果你用的是 Spring Boot / Maven / Gradle / IDEA,或者想看 实战示例,告诉我你的使用场景,我可以直接给你对应配置。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。