SonarQube扫描报错求助:JDK17下ClassLoader权限问题
Sonar Scanner运行失败:JDK17下ClassLoader.defineClass访问受限问题解决办法
解决步骤
- 匹配Scanner与SonarQube版本:确保使用的Sonar Scanner版本和SonarQube服务器版本完全一致。最新版SonarQube(如10.x及以上)配套的Scanner已适配JDK17,旧版本Scanner的依赖库未兼容JPMS模块系统。
- 添加JVM参数临时绕过限制:若暂时无法升级,运行Scanner时追加以下参数:
也可在sonar-scanner -Dsonar.scanner.java.additionalOpts="--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED"sonar-scanner.properties中持久化配置:sonar.scanner.java.additionalOpts=--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED - 升级SonarJavaScript插件:登录SonarQube后台,检查并升级JavaScript插件至最新版。旧版插件依赖的SSLR库使用未适配JDK17的cglib,新版本已替换为兼容的字节码生成方案。
问题根源
报错核心为module java.base does not "opens java.lang" to unnamed module @4f668f29:
JDK9引入的模块系统(JPMS)严格限制核心模块内部API的访问权限,java.lang.ClassLoader.defineClass属于受保护的内部方法,默认不允许未命名模块(如旧版cglib)通过反射调用。旧版Sonar Scanner或JavaScript插件依赖的cglib库未适配JPMS,触发权限校验失败,最终导致JavaScriptSensor加载异常。
内容的提问来源于stack exchange,提问作者arun
相关产品推荐
相关产品推荐

