Jenkins使用JDK8运行SonarQube 9.1扫描报类版本不兼容错误
问题根因
- 报错中的
class file version 55.0是JDK 11编译生成的类版本号,而52.0是JDK 8支持的最高类版本号 - SonarQube 9.1的官方客户端扫描器(SonarScanner)基于JDK 11编译,必须运行在JDK 11及以上的环境中
- 你当前Jenkins任务全局指定了使用JDK 8,执行Sonar扫描步骤时自动使用JDK 8启动扫描器,版本不匹配触发了该报错
注:SonarScanner的运行JDK版本和待扫描业务代码的编译JDK版本无绑定关系,高版本JDK运行的扫描器完全支持扫描低版本JDK编译的代码
解决方案(优先推荐第一种)
方案1:Jenkins任务分阶段指定JDK版本(无业务兼容性影响)
无需修改业务代码的编译JDK配置,仅单独调整Sonar扫描步骤的运行JDK即可:
- 先在Jenkins的「全局工具配置」中新增JDK 11的安装配置,记录服务器上JDK 11的实际安装路径
- 编辑对应Jenkins任务,根据你使用的扫描方式调整配置:
- 如果你是通过shell命令执行扫描:在原有sonar-scanner命令前新增环境变量指定
# 替换为你服务器上实际的JDK11安装路径 export JAVA_HOME=/usr/local/jdk-11 export PATH=$JAVA_HOME/bin:$PATH # 原有sonar-scanner执行命令保持不变 - 如果你使用Jenkins官方SonarQube Scanner插件:直接在扫描步骤的「JDK」下拉选项中选择提前配置好的JDK 11即可
- 如果你是通过shell命令执行扫描:在原有sonar-scanner命令前新增环境变量指定
方案2:降级SonarQube版本(不推荐)
如果暂时无法在Jenkins节点上安装JDK 11,可以将SonarQube服务端降级到8.9 LTS版本,该版本的SonarScanner支持在JDK 8环境下运行。
内容的提问来源于stack exchange,提问作者Alexei
相关产品推荐
相关产品推荐

