SonarQube升级后sonar-maven-plugin执行报API不兼容错误如何解决
报错根因
java.lang.UnsupportedClassVersionError触发原因非常明确:类文件版本55.0对应Java 11编译的类,你当前执行Sonar扫描的Jenkins slave节点运行环境为Java 8(最高支持52.0版本类),7.9以上版本的SonarQube对应的扫描端依赖要求运行环境最低为Java 11,和服务端环境无关。
sonar.java.jdkHome参数说明
- 作用:该参数仅用于指定分析Java源代码时使用的JDK环境,和运行Sonar扫描器本身的JDK环境是两个完全独立的配置,不能用来解决扫描器的版本兼容报错
- 部署位置:参数指向的JDK必须部署在执行Sonar扫描的Jenkins slave节点,和SonarQube服务端无关联,代码扫描逻辑完全在slave本地执行,仅最终分析结果会上报给服务端
- 配置方式:无独立properties文件的场景下,直接在Maven执行命令中通过
-D参数传递即可
Jenkins + Maven场景解决方案
方案1(推荐,长期兼容)
调整Jenkins任务的构建环境配置,将执行Maven命令的运行JDK版本切换为Java 11及以上。如果你的业务代码仍需使用Java 8编译,通过sonar.java.jdkHome参数指定业务代码用的JDK路径即可,执行命令示例:
mvn sonar:sonar -Dsonar.java.jdkHome=/jenkins/slave/path/to/jdk8
该方案无需修改服务端配置,可适配后续所有SonarQube版本升级需求。
方案2(临时过渡)
如果暂时无法调整Jenkins slave的运行JDK版本,可以降级sonar-maven-plugin到3.8.x版本,该版本还支持Java 8运行环境,执行命令示例:
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.8.0.2131:sonar
该方案仅适合临时使用,后续SonarQube继续升级可能会出现新的兼容性问题。
内容的提问来源于stack exchange,提问作者Bharat Malge
相关产品推荐
相关产品推荐

