Payara 6 Micro启动时非法反射访问警告问题咨询
Payara Micro 6 + Java 11 反射警告问题解答
1. org.glassfish.pfl.basic库的作用
org.glassfish.pfl是Payara/GlassFish生态的核心基础工具库,主要提供反射操作封装、底层对象访问、类加载逻辑辅助等基础设施能力。其中Bridge类的设计目的是绕过Java的访问控制机制,调用JDK内部私有方法,以此实现序列化、类加载相关的底层功能。
2. 兼容性与适配状态
- Java 11兼容性:警告的根源是Java 9引入的模块系统(JPMS)收紧了JDK内部API的访问权限。
java.io.ObjectInputStream.latestUserDefinedLoader()是Java 8及更早版本的私有方法,Java 11中禁止外部通过反射直接调用该方法,因此触发非法访问警告。 - Payara 6适配情况:Payara 6官方宣称支持Java 11,但
pfl-basic.jar中的这段代码属于未适配Java 9+模块规则的遗留实现,是版本迭代中遗漏的适配点。当前仅为警告,不会影响服务运行,但后续Java版本可能直接阻断这类操作,导致服务启动失败。
3. 临时消除警告的方法
若要屏蔽该警告,可在Payara Micro启动命令中添加以下JVM参数:
--add-opens java.base/java.io=ALL-UNNAMED
该参数允许非模块化代码访问java.base模块下java.io包的内部成员,临时绕过JPMS的访问限制。
内容的提问来源于stack exchange,提问作者The 5th column mouse
相关产品推荐
相关产品推荐

