解决 jdk9 及以后的 非法反射 警告

前言

我的 jdk 是 11 版的,因此经常会看见如下图所示的警告
image
很多广泛使用的库都有这种 非法反射 的问题,看起来特别难受,这里给出两种解决方案

1. JVM 参数

--illegal-access=deny --add-opens java.base/java.lang=ALL-UNNAMED 复制并粘贴到 idea 的项目启动参数中,如图
image
image

这里特别要注意,不是 程序实参,不要搞错了,不然没有效果的
修改完毕后,重新运行就可以看到效果了,如图
image

再来更多的包嗷

--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,从而不输出这些警告消息,参考下图
image
image
但,这样只是 治标不治本,在 jdk17 或更高版本的 jdk 中应该会出现奇怪的错误,而且使用Unsafe 也需要特殊的编译器参数

posted @ 2022-10-30 15:08  博麗靈夢  阅读(2403)  评论(0编辑  收藏  举报