使用 Java 11 运行 Sonar Scanner 时主版本号错误

Posted

技术标签:

【中文标题】使用 Java 11 运行 Sonar Scanner 时主版本号错误【英文标题】:Wrong Major Version number when running Sonar Scanner with Java 11 【发布时间】:2019-03-16 17:07:19 【问题描述】:

我目前正在将一个项目从 java 8 迁移到 java 11,并且一直在使用带有 gradle 的 Sonar 扫描仪将代码发送到 SonaQube。迁移到 Open JDK 11 后,我在运行 gradle sonarqube 任务时收到以下错误:

java.lang.IllegalArgumentException: Unsupported class file major version 55

我在网上看到扫描仪应该使用 jdk 8 运行,即使分析可以在某个版本的 java 文件上运行,但无法弄清楚。

理想情况下,我可以使用 Java 11 JDK 运行 gradle sonarqube。我发现另一个问题似乎有success with Java 11 using Maven,但他们的错误是不同的,我认为他们的解决方案不适用于我。

这个问题是否可以解决,还是需要等待 Sonar Scanner 支持 JDK 11?

【问题讨论】:

我怀疑 sonarqube 或 gradle 是否完全支持 Java11。你能分享他们在问题中使用的版本吗? 我对 sonar-scanner (org.sonarqube) 2.6.2 和 SonarQube 7.1 有同样的问题,SonarJava 插件更新到 5.6。看起来 Gradle 插件仍未更新以兼容 Java 11。 @Kutzi 我没有找到解决方案,但我找到了解决方法。我使用 Java 11 进行所有开发工作,但专门切换到 Java 8 以使用 gradle 运行 sonarqube 任务。我将任务称为:gradle sonarqube -Psonar8 -Dorg.gradle.java.home=$JAVA_HOME_8。 JAVA_HOME_8 指向我的 Java 8 JDK。当 gradle 获取 -Psonar 时,它会更改目标和源代码的兼容性(例如 targetCompatibility = project.hasProperty('sonar8') ? '8' : '10')以及排除所有尝试编译或运行代码的任务(例如 gradle.startParameter.excludedTaskNames += "compileJava" @CalebHulbert:我也在寻找同样的观点。我们的开发是在JDK11中完成的。但我需要使用 gradle sonarqube 来运行声纳分析。因为 gradle 声纳扫描仪尚未支持 JDK11。我是 gradle 新手,你能详细解释一下你周围提到的工作吗?提前致谢。 @Caleb Hulbert:使用的声纳扫描仪 gradle 插件版本和使用的声纳 qube 服务器版本是什么? 【参考方案1】:

如果像我这样的人会有所帮助。 源代码 Java 8(55),带有 jenkins 和 sonarqube 扫描仪。 我的错误是

信息:SonarScanner 4.6.2.2472 信息:Java 11.0.11 AdoptOpenJDK(64 位) ..... java.lang.IllegalArgumentException:不支持的类文件主要版本 55

查看此链接:Why does sonar-scanner force the usage of the embedded JRE? 并更改您的 sonnar-scanner.bat 或 sonnar-scanner.shuse_embedded_jre=false

【讨论】:

以上是关于使用 Java 11 运行 Sonar Scanner 时主版本号错误的主要内容,如果未能解决你的问题,请参考以下文章

Java+Maven的工程运行Sonar的方式

是否可以在 64 位系统 CentOS 上运行 Sonar?

运行声纳扫描仪时出错:java.lang.NoClassDefFoundError: org/sonar/batch/bootstrapper/LogOutput$Level

摇篮 4 Java 11

使用sonar进行java代码质量管理

使用Sonar进行Java代码质量管理