如果觉得文章好看,欢迎点赞。同时欢迎关注微信公众号:氷泠之路。


1 问题描述

JDK9以上很多库都有这种非法反射访问的警告,比如protostuff


解决方法两个:

  • JDK降级
  • 添加JVM参数

2 原因

降到JDK8能解决以上问题。

但是这不是本文的重点。

先说一下出现该警告的原因,笔者使用的JDKOpenJDK 11JDK9以上模块不能使用反射去访问非公有的成员/成员方法以及构造方法,除非模块标识为opens去允许反射访问。旧JDK制作的库(JDK8及以下)运行在JDK9上会自动被标识为未命名模块,为了处理该警告,JDK9以上提出了一个新的JVM参数:--illegal-access

3 --illegal-access

该参数有四个可选值:

  • permit:默认值,允许通过反射访问,因此会提示像上面一样的警告,这个是首次非法访问警告,后续不警告
  • warn:每次非法访问都会警告
  • debug:在warn的基础上加入了类似e.printStackTrace()的功能
  • deny:禁止所有的非法访问除了使用特别的命令行参数排除的模块,比如使用--add-opens排除某些模块使其能够通过非法反射访问

因此解决的办法很简单,将其设置为deny,并添加--add-opens开启对应的允许非法反射访问的模块即可。

可以通过先设置为debug找到对应的非法访问的代码,比如protostuff中的非法反射访问代码段如下:



这都是JDK基本模块的代码,因此,添加--add-opens=java.base/java.lang.invoke=ALL-UNNAMED即可。--add-opens可以使模块中的包对其他模块开放,这样就可以在运行期使用深层反射访问该程序包中的所有成员类型。

4 总结

因此解决的办法是添加如下两个JVM参数:

--illegal-access=deny --add-opens java.base/java.lang=ALL-UNNAMED

IDEA可以在运行配置中的VM options中添加:


如果使用Maven打包的时候还是会出现警告,可以在IDEA中的Maven配置中添加全局的Maven参数:


另外,如果使用Gradle而不是Maven作为管理工具,Gradle测试的时候还是会显示警告,尽管Gradle运行配置里面有VM Options选项:


但在这里添加是没用的,正确的做法是在build.gradle中添加:

test {    useJUnitPlatform()    jvmArgs('--illegal-access=deny')    jvmArgs('--add-opens', 'java.base/java.lang.invoke=ALL-UNNAMED')}

这样Gradle测试也没有问题了。

accessdeniedexception: 不允许访问_一招解决JDK9以上非法反射访问警告相关推荐

  1. 解决JDK9以上的非法反射访问警告

    1 问题描述 JDK9以上很多库都有这种非法反射访问的警告,比如protostuff: 解决方法两个: JDK降级 添加JVM参数 2 原因 降到JDK8能解决以上问题. 但是这不是本文的重点. 先说 ...

  2. 局域网内计算机无法互相访问,轻松几招解决局域网不能互相访问故障

    经常有网友反映在Win2000和WinXP中浏览网上邻居时很慢,特别是网络中有Win9x和WinMe工作站时尤为明显,有时打开网上邻居甚至需要10多分钟,还经常报错,该如何解决呢?笔者以前也曾遇到过类 ...

  3. python输出结果存到文件拒绝访问_三步解决python PermissionError: [WinError 5]拒绝访问的情况...

    问题描述: 1.当你卸载python库的时候,如:pip uninstall pandas 2.当你想要更新python库的时候,如:pip install --upgrade pandas 等等- ...

  4. chrome 使用gpu 加速_一招解决 Chrome / Edge 卡顿缓慢 让浏览器重回流畅顺滑

    最近一段时间,我发现电脑上的 Chrome 谷歌浏览器越用越卡了.特别是网页打开比较多,同时还有视频播放时,整个浏览器的响应速度都会变得非常缓慢,视频也会卡顿掉帧. 我用的是 iMac / 32GB ...

  5. php用chrome打不开,chrome打不开任何网页怎么回事_一招解决chrome打不开任何网页的方法-系统城...

    Chrome是一款非常受欢迎的浏览器,有时我们在使用谷歌浏览器的时候,出现网页打不开的情况,试着打开其他网页也都打不开,尝试很多网站都一样,检查网络都是正常的,这很明显是浏览器设置出现问题,下面我们一 ...

  6. wifi丢包率高怎么解决_几招解决无线路由器网速慢,断网丢包不稳定

    Wifi的出现使得上网更加方便快捷,当你专注的玩着手机或电脑时,信号却变得非常差,甚至打开不了网页了,可通过网线上网的台式机网速却很正常,这着实是一件令人抓狂的事.不仅仅是网速慢,有时,wifi还老是 ...

  7. 导出文件_一招解决PDF文件导出图片

    将PDF文件保存为高清图片是经常需要进行的保存方式之一,因为PDF文件虽然安全性高,但是相比较图片而言,还是不易进行查看的,那么如何将PDF文件导出图片呢?以前也了解过很多方法,不过最好的当然不是截图 ...

  8. docker安装mysql远程不能访问_虚拟机中docker安装mysql远程无法访问

    问题:虚拟机中docker安装mysql远程无法访问 背景: [root@localhost ~]# docker run -p 3306:3306 --name mysql01 -e MYSQL_R ...

  9. 外网访问FTP服务,解决只能以POST模式访问Filezilla的问题

    在内网可以正常使用PASV,但是在外网不行,导致数据传输慢或者根本连接不了,在FlashFXP中通过日志,找到了解决方法 解决方法 1.在Filezilla--Edit--Settings--Pass ...

最新文章

  1. 简述python中怎样导入模块_Python中导入模块的两种模式,import
  2. 在虚拟机中快速安装 Ubuntu 18.04
  3. elasticsearch(es)分布式全文检索引擎 简介
  4. leetcode解码方法(动态规划python)
  5. python string类型_Python的基本数据类型——String
  6. java servlet文件下载_Java之Servlet文件下载20190228
  7. mosquitto源码分析(四)
  8. 假如你的老板掉水里了,你的岗位能做什么?
  9. C语言程序设计,流程图
  10. android gps 获取方位_Android通过gps获取定位的位置数据和gps经纬度
  11. 数字日期格式转换yyyymmdd_如何把日期改为yyyymmdd
  12. 0x0F转换成二进制
  13. Html基本标签(斜体em、空格nbsp、段落p、标题h1、换行br、大于号gt、小于号lt、引号quot、版权符号copy、图片img、水平线hr)
  14. 苹果4s怎么越狱教程_苹果u盘越狱教程
  15. 空指针引用,导致linux内核panic(重启)
  16. 【工具-DVWA】DVWA的安装和使用
  17. 原子战舰与8266代码理解(while循环后直接加分号)
  18. 【JAVA】8.继承(图形面积问题)
  19. Python作为移动客户端后台服务器
  20. 修改管理员信息php,修改管理员_ThinkPHP_大笨熊_IT技术平台

热门文章

  1. 主存地址位数怎么算_两位数乘一位数也能口算?对!你没看错,不是特殊情况也行...
  2. 程序员关机代码python_Python实现远程开关机【高薪必备技术】
  3. mysql开启慢查询
  4. 用Python评测三种批量查询经纬度的方法,你pick哪一种?
  5. Python项目打包发布到pypi
  6. 肝!Python 100 例
  7. 干货 | 仅需10分钟,开启你的机器学习之路!
  8. php中访问控制_一个实例:基于RBAC理论的访问控制实践
  9. pycharm安装pyqt5失败_PyQt5安装与Pycharm集成配置开发环境
  10. h5 video 手机上无法显示_怎样把手机上的导航显示在汽车屏幕上