模块系统 JPMS(Java 9+)
动机
强封装、可靠配置、可裁剪运行时(jlink)。类路径时代「公共类型皆可见」在大型应用中带来维护与安全成本。
module-info.java
java
module com.example.app {
requires java.net.http;
exports com.example.api;
opens com.example.internal to org.junit;
}
requires:依赖其他模块(transitive传递依赖可读性)。exports:包对依赖模块可见。opens:允许反射打开给指定模块(框架与测试常用)。
迁移
未模块化 JAR 以 自动模块 名(通常由 JAR 名推导)参与解析;迁移路径需处理分裂包、非法访问等问题。工具链与 IDE 对模块路径(--module-path)与类路径混用有明确规则。