java.lang.reflect.InaccessibleObjectException: Unable to make final void java.lang.Throwable.setCaus

在软件进行maven编译时候会遇到java.lang.reflect.InaccessibleObjectException: Unable to make final void java.lang.Throwable.setCause(java.lang.Throwable) accessible: module java.base does not "opens java.lang" to unnamed module是Java 9及以上版本模块化系统(Jigsaw Project)引入的一个安全特性导致的。自Java 9起,核心类库被组织成模块,并且默认情况下对非模块化的代码(unnamed module)提供了封装保护。

解决:

1. 切换到java 1.8(java 8 )以下 或者在maven中禁止使用test

2. 模块化应用并且禁用模块系统的反射限制

  • 请在你的模块声明文件(module-info.java)中添加需要访问java.lang.Throwable.setCause方法的opens语句。
module your.module.name {
    requires transitive java.base;
    opens your.package.to.open to java.base; // 如果是在你的包内调用
    opens java.lang to your.module.name; // 如果要在你的模块内访问java.lang.Throwable
}
  • 禁用模块系统的反射限制

在启动Java应用程序时,可以通过命令行参数--add-opens java.base/java.lang=ALL-UNNAMED临时关闭特定模块的反射限制。但这不是一个推荐的长期解决方案,因为它降低了安全性并可能引起其他问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wL魔法师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值