当前位置: 首页 > 后端技术 > Java

解决Sentinel模块java.base不“打开java.lang”的问题

时间:2023-04-01 23:40:42 Java

1环境Sentinel1.8.3OpenJDK17.0.2Manjaro2问题描述根据官方GithubWiki使用如下命令启动Sentinel:java-Dserver.port=8080-Dcsp.sentinel.dashboard.server=localhost:8080-Dproject.name=sentinel-dashboard-jarsentinel-dashboard.jar报错截图如下:总结如下:java.lang.IllegalStateException:无法加载配置类:com.alibaba.csp.sentinel.dashboard.DashboardApplicationCausedby:org.springframework.cglib.core.CodeGenerationException:java.lang.reflect.InaccessibleObjectException-->Unabletomakeprotectedfinaljava.lang.Classjava.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)抛出java.lang.ClassFormatErroraccessible:modulejava.basedoesnot"opensjava.lang"tounnamedmodule@74fdb593Causedby:java.lang.reflect.InaccessibleObjectException:Unabletomakeprotectedfinaljava.lang.Classjava.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)throwsjava.lang.ClassFormatErroraccessible:modulejava.basedoesnot"opensjava.lang"tounnamedmodule@74fdb593可以看到异常来自InaccessibleObjectException,报错信息为modulejava.basedoesnot"opensjava.lang"tounnamedmodule@74fdb5933问题解决其实之前作者写过一篇文章是关于解决JDK9非法反射访问警告的。这种问题在JDK8中是不会出现的。同样是模块化的问题,所以解决方法类似,打开模块即可。需要添加以下两个启动参数:--add-opensjava.base/java.lang=ALL-UNNAMED--add-opensjava.base/sun.net.util=ALL-UNNAMED,完整命令如下如下:java-Dserver.port=8080-Dcsp.sentinel.dashboard.server=localhost:8080-Dproject.name=sentinel-dashboard--add-opensjava.base/java.lang=ALL-UNNAMED--add-opensjava.base/sun.net.util=ALL-UNNAMED-jarsentinel-dashboard-1.8.3.jar只需更改端口和Sentinel版本即可。