Sonarqube 分析上的指针不能为空,缺少字段或规则参数

Sonarqube 分析上的指针不能为空,缺少字段或规则参数,sonarqube,sonar-runner,sonarqube-4.5,Sonarqube,Sonar Runner,Sonarqube 4.5,在java项目上运行分析时,我遇到了nullpointer异常 触发分析失败的条件只有在我激活质量配置文件中的某些规则时才会发生。特别是,任何具有可以重写的参数的规则都会导致nullpointer失败。无论我是否提供覆盖值或参数是否保留为默认值,它都会失败 我应该注意,如果在质量配置文件中停用这些特定规则,我可以成功完成分析。它似乎只与某些具有参数的规则相关 我可以用sonar runner和org.sonarqube gradle插件(v1.0)复制这种空指针故障。所以我怀疑这不是runner

在java项目上运行分析时,我遇到了nullpointer异常

触发分析失败的条件只有在我激活质量配置文件中的某些规则时才会发生。特别是,任何具有可以重写的参数的规则都会导致nullpointer失败。无论我是否提供覆盖值或参数是否保留为默认值,它都会失败

我应该注意,如果在质量配置文件中停用这些特定规则,我可以成功完成分析。它似乎只与某些具有参数的规则相关

我可以用sonar runner和org.sonarqube gradle插件(v1.0)复制这种空指针故障。所以我怀疑这不是runner或插件的问题,而是SonarQube服务器和/或数据库的某种设置问题

问题是,我不知道如何去解决这个问题。SonarQube数据库没有文档记录(我知道),我怀疑数据库中可能缺少一些东西,但我甚至不确定它们可能在哪里

有没有关于我应该去哪里的建议

版本:
SonarQube 4.5.2
SonarQube Runner 2.4
Java 1.8.0_40 Oracle Corporation(64位)
Mac OS X 10.10.4 x86_64

以下是错误的堆栈跟踪:

INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
Total time: 1:43.316s
Final Memory: 27M/635M
INFO: ------------------------------------------------------------------------
ERROR: Error during Sonar runner execution
org.sonar.runner.impl.RunnerException: Unable to execute Sonar
    at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:91)
    at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69)
    at org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50)
    at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102)
    at org.sonar.runner.api.Runner.execute(Runner.java:100)
    at org.sonar.runner.Main.executeTask(Main.java:70)
    at org.sonar.runner.Main.execute(Main.java:59)
    at org.sonar.runner.Main.main(Main.java:53)
Caused by: java.lang.NullPointerException
    at org.sonar.api.batch.rule.Checks.getField(Checks.java:180)
    at org.sonar.api.batch.rule.Checks.configureFields(Checks.java:167)
    at org.sonar.api.batch.rule.Checks.instantiate(Checks.java:152)
    at org.sonar.api.batch.rule.Checks.addAnnotatedChecks(Checks.java:127)
    at org.sonar.java.SonarComponents.registerTestCheckClasses(SonarComponents.java:128)
    at org.sonar.plugins.java.JavaSquidSensor.analyse(JavaSquidSensor.java:82)
    at org.sonar.batch.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:79)
    at org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:70)
    at org.sonar.batch.phases.PhaseExecutor.execute(PhaseExecutor.java:119)
    at org.sonar.batch.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:194)
    at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:93)
    at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:78)
    at org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.java:233)
    at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:228)
    at org.sonar.batch.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:221)
    at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:93)
    at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:78)
    at org.sonar.batch.scan.ScanTask.scan(ScanTask.java:64)
    at org.sonar.batch.scan.ScanTask.execute(ScanTask.java:51)
    at org.sonar.batch.bootstrap.TaskContainer.doAfterStart(TaskContainer.java:125)
    at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:93)
    at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:78)
    at org.sonar.batch.bootstrap.BootstrapContainer.executeTask(BootstrapContainer.java:173)
    at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:95)
    at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67)
    at org.sonar.runner.batch.IsolatedLauncher.execute(IsolatedLauncher.java:48)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:87)
    ... 9 more

我们解决了这个问题,问题确实是SonarQube服务器上的Java插件。解决方案是降低Java插件的等级。以下是我们最终使用的版本:

  • Checkstyle[Checkstyle]2.2使用Checkstyle分析Java代码
  • Clover[Clover]3.0使用Atlassian Clover获得代码覆盖率
  • Cobertura[Cobertura]1.6.3使用Cobertura获得代码覆盖率
  • Findbugs[Findbugs]3.1使用Findbugs 3.0.0分析Java代码
  • Java[Java]2.9.1 SonarQube规则引擎
  • JIRA[JIRA]1.2以各种方式将SonarQube连接到Atlassian JIRA
  • LDAP[LDAP]1.4将身份验证委托给LDAP
  • PMD[PMD]2.3使用PMD分析Java代码

从错误来看,很可能是插件有问题。你安装了哪些插件。哪一个与您激活以再现错误的规则有关?这听起来像是java插件中的一个问题。你能告诉我们你使用的是哪个版本的java插件吗?您可以试用最新版本(3.4)吗?感谢您的回复,以下是已安装的插件:[Java[Java]3.3 SonarQube规则引擎][Checkstyle[Checkstyle]2.3][Clover[Clover]3.0][Cobertura[Cobertura]1.6.3][Findbugs[Findbugs]3.2][Java[Java]3.3][JIRA[JIRA]1.2][LDAP[LDAP]1.4][PMD[PMD]2.3]触发失败的规则的一些示例是[“switch”语句不应该有太多的“case”子句(默认值30)]或[类不应该太复杂(默认值200)]。我将尝试你建议的最新版本。升级Java插件没有奏效,但降级做到了。这肯定是插件版本的问题。谢谢你的帮助!