我的Java项目是通过Maven在1.8编写和编译的。当我尝试使用 sonar-maven-plugin Ver 分析我的代码时出现以下错误。 3.9.1.2184 用于 SonarQube 9.2.4.
提到以下参数
sonar.java.jdkHome=D:....\jdk1.8.0_121 sonar.java.source=1.8
Execution default-cli of goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.1.2184:sonar failed: An API incompatibility was encountered while executing org.sonarsource.scanner.maven:sonar-maven-plugin:3.9 执行时遇到API不兼容.1.2184:sonar: java.lang.UnsupportedClassVersionError: org/sonar/batch/bootstrapper/EnvironmentInformation 已由较新版本的 Java 运行时(类文件版本 55.0)编译,此版本的 Java 运行时仅识别类文件版本高达 52.0 [错误] - - - - - - - - - - - - - - - - - - - - - - - - ------ [错误] 领域 = 插件>org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.1.2184 [错误] 策略 = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy [错误] urls[0] = 文件:/../.m2/repository/org/sonarsource/scanner/maven/sonar-maven-plugin/3.9.1.2184/sonar-maven-plugin-3.9.1.2184.jar [错误] urls[1] = 文件:/../.m2/repository/org/sonatype/plexus/plexus-sec-dispatcher/1.4/plexus-sec-dispatcher-1.4.jar [错误]国外进口数量:1 [错误]导入:条目[从领域ClassRealm导入[maven.api,父级:null]]
Sonarqube 9.0以上需要java 11.
有关 Java 类文件版本的信息,请参见https://javaalmanac.io/bytecode/versions/。
您的错误告诉您,您使用的是 JDK 8 (52.0),但插件代码是使用 JDK 11 (55.0) 编译的。所以你的 JDK 无法理解插件类。
怎么办?将执行 maven 构建的 JDK 更改为 JDK 11。您的源代码仍然可以是 java 8,您也可以为 jdk8 编译 - 但执行的 JDK 必须是 11+。
您可以通过以下命令来归档您的问题。我面临着同样的问题,但在命令下努力解决。
- mvn verify sonar:sonar -Dsonar.host.url=http://localhost:Port -Dsonar.login=Token -Dsonar.login=Sonar_username -Dsonar.password=Sonar_password
这也可能是由 Java 8 版本的 Jacoco 使用 Java 11 版本的 Sonar 引起的。在这种情况下,Jacoco 版本也需要升级到 Java 11 版本。我将 Jacoco 从 0.7.8 升级到 0.8.8,问题就解决了。