运行sonar-scanner.bat扫描多Java应用时触发NullPointerException异常求助
问题:Sonar Scanner扫描Java应用时抛出NullPointerException
环境信息
- SonarQube版本:sonarqube-7.8
- Sonar Scanner版本:sonar-scanner-cli-4.8.0.2856-windows
- 操作场景:Windows终端执行
sonar-scanner.bat扫描多个Java应用,已配置好Sonar Scanner路径 - 需求:在本地SonarQube(localhost:9000)获取应用测试报告
报错信息
INFO: EXECUTION FAILURE INFO: ------------------------------------------------------------------------ INFO: Total time: 25.283s INFO: Final Memory: 15M/57M INFO: ------------------------------------------------------------------------ ERROR: Error during SonarScanner execution java.lang.NullPointerException at org.sonarsource.scm.git.GitScmProviderBefore77.revisionId(GitScmProviderBefore77.java:173) at org.sonar.scanner.scm.ScmRevisionImpl.get(ScmRevisionImpl.java:62) at org.sonar.scanner.report.MetadataPublisher.addScmInformation(MetadataPublisher.java:153) at org.sonar.scanner.report.MetadataPublisher.publish(MetadataPublisher.java:105) at org.sonar.scanner.report.ReportPublisher.generateReportFile(ReportPublisher.java:152) at org.sonar.scanner.report.ReportPublisher.execute(ReportPublisher.java:138) at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:366) at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136) at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122) at org.sonar.scanner.bootstrap.GlobalContainer.doAfterStart(GlobalContainer.java:141) at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136) at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:122) at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:73) at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67) at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60) at com.sun.proxy.$Proxy0.execute(Unknown Source) at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:189) at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:138) at org.sonarsource.scanner.cli.Main.execute(Main.java:126) at org.sonarsource.scanner.cli.Main.execute(Main.java:81) at org.sonarsource.scanner.cli.Main.main(Main.java:62) ERROR: ERROR: Re-run SonarScanner using the -X switch to enable full debug logging.
解决方案
- 禁用SCM检测:在项目的
sonar-project.properties文件中添加sonar.scm.disabled=true,跳过Git相关的SCM信息收集,直接绕过空指针触发点。 - 检查Git仓库有效性:确保被扫描的Java应用目录是完整的Git仓库,执行
git status验证仓库状态,若.git目录损坏,重新初始化或修复仓库。 - 调整版本兼容性:Sonar Scanner 4.8.0与SonarQube 7.8存在版本适配问题,可尝试降级Sonar Scanner至3.x系列(如3.3.0.1492),或升级SonarQube至支持该Scanner版本的LTS版本(注意SonarQube 7.8已停止维护,建议升级到长期支持版本)。
- 指定Git可执行路径:若Git未加入系统环境变量,在Sonar Scanner的配置文件
sonar-scanner.properties中添加sonar.scm.git.executable=C:/Program Files/Git/bin/git.exe(根据实际Git安装路径调整),确保Scanner能调用Git命令。 - 清理扫描缓存:删除
%USERPROFILE%/.sonar/cache目录下的缓存文件,消除旧缓存导致的异常,重新执行扫描。
内容的提问来源于stack exchange,提问作者Nidhi Singh
相关产品推荐
相关产品推荐

