如何解决Jenkins中Sonar Scanner插件报错且无需变更Java版本的问题
问题根因
报错中class file version 55.0对应Java 11编译的类文件,52.0对应你当前使用的Java 8运行环境,核心冲突为当前调用的sonar-maven-plugin:3.9.0及配套依赖最低要求Java 11运行,无需修改全局Java版本的前提下,可通过以下方案解决问题:
解决方案
方案1:降级sonar-maven-plugin到兼容Java8的版本
兼容Java8的最高sonar-maven-plugin版本为3.8.0.2131,可选择以下任意一种方式指定版本:
- 直接在项目pom.xml中固定sonar-maven-plugin的版本为3.8.0.2131
- 在Jenkins执行扫描命令时手动指定版本:
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.8.0.2131:sonar <其余扫描参数>
注意:该方案要求你的SonarQube服务端版本≤9.7,更高版本的SonarQube服务端不再兼容3.8.x版本的扫描插件
方案2:Sonar扫描步骤单独指定JDK11运行
不需要修改项目编译使用的Java版本,仅给Sonar扫描步骤单独配置JDK11即可:
- 先在Jenkins全局工具配置中新增JDK11安装项,命名为例如
JDK11 - 对应任务配置调整:
- Freestyle任务:在Sonar扫描对应的
Invoke top-level Maven targets构建步骤中,选择JDK为提前配置的JDK11,其余编译步骤仍使用原有JDK8即可 - Pipeline任务参考配置:
- Freestyle任务:在Sonar扫描对应的
pipeline { agent any tools { jdk 'JDK8' // 全局默认使用JDK8编译项目 } stages { stage('项目编译') { steps { sh 'mvn clean install' } } stage('Sonar代码扫描') { tools { jdk 'JDK11' // 该步骤单独使用JDK11运行 } steps { sh 'mvn sonar:sonar <其余扫描参数>' } } } }
该方案不影响项目本身的编译Java版本,也可适配高版本SonarQube服务端,推荐长期使用。
方案3:降级Jenkins Sonar插件版本
如果你的SonarQube服务端版本≤9.7,可直接把Jenkins安装的Sonar插件从2.13.1降级到2.12版本,该版本默认拉取的sonar-maven-plugin为兼容Java8的版本,无需额外调整其他配置。
内容的提问来源于stack exchange,提问作者system-dev
相关产品推荐
相关产品推荐

