在 Java 里说的 “Module(模块)”,通常指 Java 9 引入的 JPMS(Java Platform Module System)。下面从兼容性角度系统讲一下,实际开发中很容易踩坑的地方。
✅ 基本兼容
⚠️ 例外情况:
sun.misc.*)❌ 不兼容
module-info.java 的 Jar✅ 解决方案:
✅ 可以
示例:
requires guava;
⚠️ 问题:
✅ 可以
⚠️ 限制:
java.lang.reflect.InaccessibleObjectException
原因:
opens 包给反射使用解决:
opens com.example.internal to spring.core;
或启动参数:
--add-opens java.base/java.lang=ALL-UNNAMED
❌ 常见不友好:
✅ 现在大多支持,但仍建议:
✅ 规范做法:
module-info.java| 项目类型 | 建议 |
|---|---|
| 业务系统 | 不用 module,classpath |
| 公共 SDK | 提供 module-info |
| 容器/中间件 | 可使用 module |
| 老系统迁移 | 先 classpath,再逐步模块化 |
--module-path lib \
--add-modules my.module \
-classpath legacy.jar
Java Module 向后不兼容,向前基本兼容; 模块与非模块可以混合,但反射和三方库是主要兼容雷区。
如果你有具体场景(如 Spring Boot / Java 8 升级 / 框架冲突),我可以给你更针对性的建议。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。