Java Module(即 Java 9 引入的 JPMS,Java Platform Module System)报错的原因非常多,一般不是“Java Module 本身错了”,而是模块声明、依赖、访问权限或构建配置有问题。我给你一个体系化的排查清单 + 常见错误示例,你可以对照看看。
| 报错现象 | 常见原因 |
|---|---|
Module not found |
module-info.java 中 requires 的模块名不存在 |
Package not visible |
模块没用 exports 暴露包 |
Cannot access class |
反射访问未 opens |
Module loop detected |
模块循环依赖 |
Unnamed module reads package |
普通 jar 和模块混用 |
requires transitive 报错 |
传递依赖模块不存在 |
| Java 8 项目用 module-info | Java 8 不支持 |
| Maven / Gradle 构建失败 | 构建工具模块配置错误 |
报错示例
Error: Module com.example.util not found
module-info.java
module app {
requires com.example.util;
}
原因
com.example.util 不存在✅ 解决
module-info.class)module app {
requires util; // 自动模块名
}
报错
com.example.util.Hello is not visible
工具模块
module util {
// 没有 exports
}
✅ 解决
module util {
exports com.example.util;
}
⚠️ 规则
exports → 其他模块根本看不到这个包requires 了也没用报错
InaccessibleObjectException
原因
✅ 解决
module util {
opens com.example.util;
}
或(深度反射)
opens com.example.util to jackson.databind;
错误
Cycle detected
module a {
requires b;
}
module b {
requires a;
}
✅ 解决
❌ 不支持
module-info.java is not supported in -source 8
✅ 解决
module-info.javamodule not found: xxx
✅ 注意
module-info.java 默认在 src/main/java你可以逐条检查:
module-info.java 文件存在requires 的模块名真实存在exports 了包opens你可以直接贴出:
module-info.java我可以直接告诉你 是哪一条规则被违反了 ✅
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。