Java 1.8代码集成SonarQube(Java11)扫描失败,求解决方案
解决Jenkins中SonarQube扫描的UnsupportedClassVersionError问题
报错原因
你遇到的UnsupportedClassVersionError是因为SonarScanner的运行Java版本不匹配:SonarQube 7.9及以上版本要求SonarScanner使用Java 11运行(class文件版本55.0对应Java11),但当前Jenkins执行扫描步骤时用的是Java 1.8(仅支持到版本52.0)。
解决方案
以下是几种可行的解决方式,按需选择:
为SonarScanner步骤单独指定Java11环境
- 进入Jenkins「全局工具配置」,添加Java11的安装(可选择自动下载或指定服务器上已有的Java11路径),命名为
JDK11 - 在Jenkins项目中配置扫描步骤的Java环境:
- 流水线项目:用
withEnv临时切换Java环境执行扫描命令withEnv(['JAVA_HOME=/usr/lib/jvm/java-11-openjdk', 'PATH+JAVA=$JAVA_HOME/bin']) { sh 'sonar-scanner -Dsonar.projectKey=your-project-key -Dsonar.sources=src' } - 自由风格项目:在「构建环境」中勾选「使用特定的JDK」,选择配置好的
JDK11
- 流水线项目:用
- 进入Jenkins「全局工具配置」,添加Java11的安装(可选择自动下载或指定服务器上已有的Java11路径),命名为
升级Jenkins全局Java版本到11
- 确保代码编译时添加
-source 1.8 -target 1.8参数,保证编译出的字节码兼容Java8(不影响业务运行) - 修改Jenkins启动配置(通常是
/etc/default/jenkins或启动脚本),将JAVA_HOME指向Java11路径,重启Jenkins服务
- 确保代码编译时添加
降级SonarQube到兼容Java8的版本
如果必须用Java8运行扫描,可将SonarQube降级到7.9.x LTS版本(该版本支持SonarScanner用Java8),但注意旧版本已停止维护,存在安全隐患,不推荐长期使用
原报错信息
ERROR: Error during SonarScanner execution java.lang.UnsupportedClassVersionError: org/sonar/batch/bootstrapper/EnvironmentInformation has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
内容的提问来源于stack exchange,提问作者Ravish Rawat
相关产品推荐
相关产品推荐

