【问题标题】:SonarQube analysis of Java module fails in JenkinsJenkins 中 Java 模块的 SonarQube 分析失败
【发布时间】:2016-03-31 06:29:32
【问题描述】:

我创建了一个 Jenkins 项目来对我的产品代码运行 SonarQube 分析。工作区包含多个模块(一些在 Nodejs 中,即 Javascript)和一些在 Java 中。我的声纳属性看起来像

sonar.projectKey=product-key
sonar.projectName=product-name
sonar.projectVersion=1.0
sonar.sources=./nodejsmodule1,./nodejsmodule2
sonar.sourceEncoding=UTF-8

这完全没有问题,并为我提供了一个不错的 SonarQube 仪表板。但是,如果我将 sonar.sources 属性更改为:

sonar.sources=./nodejsmodule1,./nodejsmodule2,./java-module-name/src/main/java

Jenkins 构建失败并出现以下错误:

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.NoSuchMethodError: org.sonar.api.resources.Project.getPom()Lorg/apache/maven/project/MavenProject;
at org.sonar.plugins.surefire.api.SurefireUtils.getReportsDirectoryFromPluginConfiguration(SurefireUtils.java:56)
at org.sonar.plugins.surefire.api.SurefireUtils.getReportsDirectory(SurefireUtils.java:39)
at org.sonar.plugins.surefire.SurefireSensor.analyse(SurefireSensor.java:63)
at org.sonar.batch.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:58)
at org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:50)
at org.sonar.batch.phases.PhaseExecutor.execute(PhaseExecutor.java:98)
at org.sonar.batch.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:192)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:100)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:85)
at org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.java:258)
at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:253)
at org.sonar.batch.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:243)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:100)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:85)
at org.sonar.batch.bootstrap.GlobalContainer.executeAnalysis(GlobalContainer.java:153)
at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:110)
at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:76)
at org.sonar.runner.batch.IsolatedLauncher.execute(IsolatedLauncher.java:48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:87)
... 9 more

当我使用时

sonar.sources=./nodejsmodule1,./nodejsmodule2,./java-module-name/pom.xml

错误消失了。发生多语言分析。该项目的 SonarQube 仪表板上的事件小部件显示在分析期间使用了 Java 和 JavaScript 配置文件。但代码分析结果不包含任何关于 Java 的内容。 JavaScript 分析结果出现。我指定sonar.sources 值的顺序无关紧要(即JavaScript 后跟Java 或Java 后跟JavaScript)。我查看了其他 StackOverflow 问题(例如 Sonar analysing Maven 3 and multi language project using JENKINS)。显然,他们也在指定类文件的位置。也许 Java 代码在 Jenkins 构建步骤期间被编译以进行 SonarQube 分析,因此它们可以指向 target/classes 位置。当我尝试这个(即sonar.binaries=./java-module-name/target/classes)时,构建失败。

基于http://docs.sonarqube.org/display/SONAR/Analyzing+with+SonarQube+Scanner+for+Maven#AnalyzingwithSonarQubeScannerforMaven-AnalyzingaMulti-languageProject,我也尝试了sonar.sources=./java-module-name/src,./java-module-name/pom.xml。但这又带来了例外。 sonar.sources=./java-module-name,./java-module-name/pom.xmlsonar.sources=./java-module-name/src/main,./java-module-name/pom.xmlsonar.sources=./java-module-name/src/main/java,./java-module-name/pom.xml 也会发生异常。

我做错了什么?

【问题讨论】:

  • 您使用的是哪个版本的声纳?此外,如果您将该行设置为 sonar.sources=./java-module-name/src/main/java 是否会出现异常(换句话说,如果您不在同一运行中将它与 JavaScript 混合,Java 是否可以工作? .)
  • SonarQube 版本为 5.2。是的,即使我设置了 sonar.sources=./java-module-name/src/main/java,我也会遇到异常。即,即使我没有将它与 JavaScript 混合,Java 分析也不起作用。
  • 尝试同时包含./java-module-name/src/main/java./java-module-name/pom.xml
  • 我做到了。我得到了例外。

标签: java jenkins sonarqube


【解决方案1】:

只有在包含 Java 源代码时才会出现该错误?因此,也许您在 5.2 上使用了一些过时的插件,这些插件在 Java 分析时触发并使用不再可用的 getPom() 方法。

org.sonar.api.resources.Project.getPom() 在 SQ 5.2 中不再可用。

See Project.class in 5.2

堆栈跟踪指向万无一失。你用的是哪个版本?

【讨论】:

  • 我检查了 SonarQube 服务器上的 Administration > System > Update Center 选项卡。 SonarQube rule engine. Java 语言版本 3.0 已安装。
  • 我刚刚将 Java 插件更新到 3.8(最新版本)并重新启动了 SonarQube 服务器。这解决了这个问题。非常感谢!
猜你喜欢
  • 2016-06-17
  • 2017-02-12
  • 1970-01-01
  • 2018-06-25
  • 2016-11-23
  • 2018-02-27
  • 2017-08-16
  • 1970-01-01
  • 2021-07-19
相关资源
最近更新 更多