foojay
从 Java 21 升级到 Java 25:真正会出问题的地方
文章梳理了 Java 21 到 Java 25 之间七类会导致构建失败、启动失败或行为改变的变更,每项均在 JDK 21.0.7 与 JDK 25.0.3 上实测验证。一是自 JDK 23 起 javac 默认不再自动运行类路径上的注解处理器,编译静默成功却缺少生成的代码,需在 Maven 中显式声明 annotationProcessorPaths 或设置 proc=full。二是安全管理器被 JDK 24 永久禁用,-Djava.security.manager=allow 会导致 JVM 无法启动,Subject.getSubject 也改为抛出异常。三是 Thread.suspend/resume 等方法被移除,旧依赖 JAR 会抛 NoSuchMethodError,catch 无法捕获。四是 COMPAT 区域数据被删除,同一代码的日期格式与解析结果改变。五是 sun.misc.Unsafe 内存访问与 JNI 会打印警告,未来将直接失败,建议用严格开关跑测试。六是 -Xfuture、-Xnoagent 等启动参数会导致 JVM 拒绝启动,-XX:-ZGenerational 被忽略,ZGC 默认转为分代模式。七是 Windows 上 File.delete() 不再删除只读文件,TLS 默认算法更严格。文末给出用 jdeprscan、jdeps、检索启动参数和阅读发行说明等排查清单。