解决 jdk9 及以后的 非法反射 警告
前言
我的 jdk 是 11 版的,因此经常会看见如下图所示的警告
很多广泛使用的库都有这种 非法反射
的问题,看起来特别难受,这里给出两种解决方案
1. JVM 参数
将--illegal-access=deny --add-opens java.base/java.lang=ALL-UNNAMED
复制并粘贴到 idea 的项目启动参数中,如图
这里特别要注意,不是 程序实参
,不要搞错了,不然没有效果的
修改完毕后,重新运行就可以看到效果了,如图
再来更多的包嗷
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.io=ALL-UNNAMED
--add-opens java.base/java.math=ALL-UNNAMED
--add-opens java.base/java.net=ALL-UNNAMED
--add-opens java.base/java.nio=ALL-UNNAMED
--add-opens java.base/java.security=ALL-UNNAMED
--add-opens java.base/java.text=ALL-UNNAMED
--add-opens java.base/java.time=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
2. Unsafe
大致思路就是使用 Unsafe
类修改 jdk.internal.module.IllegalAccessLogger#logger
对象, 使其为 null
,从而不输出这些警告消息,参考下图
但,这样只是 治标不治本
,在 jdk17
或更高版本的 jdk 中应该会出现奇怪的错误,而且使用Unsafe
也需要特殊的编译器参数
本文作者:博麗靈夢
本文链接:https://www.cnblogs.com/Hakurei-Reimu-Zh/p/16841339.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步