首页 文章

Jenkins的SonarQube Java模块分析失败

提问于
浏览
2

我创建了一个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配置文件 . 但是代码分析结果并不重要,我指定了 sonar.sources 值(即JavaScript后跟Java或Java后跟JavaScript) . 我查看了其他StackOverflow问题(例如Sonar analysing Maven 3 and multi language project using JENKINS) . 显然,他们也指定了类文件的位置 . 也许在SonkinsQube分析的Jenkins构建步骤中编译java代码,以便它们可以指向 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 也会发生异常 .

我究竟做错了什么?

1 回答

  • 0

    只有在包含Java源时才会显示错误?所以,也许你在5.2上使用了一些过时的插件,这些插件在Java分析时被触发并使用不再可用的 getPom() 方法 .

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

    See Project.class in 5.2

    stacktrace指向万无一失 . 你使用的是哪个版本?

相关问题