使用sonarScanner扫描项目的时候报错 jdk使用的1.8版本
Caused by: net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InaccessibleObjectException-->Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @36c7cbe1
sonarScanner扫描项目报错
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
关注引自免费微信小程序:皆我百晓生
看起来你在使用SonarScanner进行代码分析时遇到了一个与Java版本兼容性相关的问题。这个错误信息表明在尝试使用CGLIB库(一种用于动态代理的工具)对类进行操作时,由于Java 9及更高版本的安全增强特性,导致无法访问
ClassLoader#defineClass方法。要解决这个问题,你需要确保SonarScanner、 SonarQube服务器以及你的项目都使用相同的JDK版本,并且是Java 8或更低版本。此外,还需要更新CGLIB库到支持Java 9+的版本,因为旧版CGLIB可能不兼容新版本的Java。
以下是针对这个问题的步骤:
-
检查并确保所有环境的JDK版本:
- 确保你的本地开发环境、SonarScanner运行环境以及SonarQube服务器都是Java 8。
- 可以通过运行
java -version来查看当前JDK版本。
-
更新SonarScanner:
-
更新SonarQube:
-
更新CGLIB依赖:
- 在你的项目中,确认是否有使用CGLIB库。如果是Maven项目,打开pom.xml文件;如果是Gradle项目,打开build.gradle文件。
- 更新CGLIB库至支持Java 9+的版本。例如,对于Maven项目,可以将CGLIB依赖更新为以下内容:
<dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.3.0</version> </dependency> - 对于Gradle项目,更新为:
implementation 'cglib:cglib:3.3.0'
-
清理构建缓存:
- 清理Maven或Gradle的本地仓库缓存,以便加载新的依赖项。
- 对于Maven,删除
.m2/repository目录下的相应CGLIB包。 - 对于Gradle,删除
~/.gradle/caches/modules-2/files-2.1目录下的相应CGLIB模块。
-
重新执行SonarScanner:
- 完成上述更改后,再次运行SonarScanner扫描你的项目,应该能成功完成而不会遇到之前提到的错误。
如果你仍然遇到问题,可能需要检查其他依赖库是否也可能存在类似的问题,确保它们都已更新到支持Java 9+的版本。
解决 无用评论 打赏 举报 编辑记录-