繁体   English   中英

Jenkins对Java模块的SonarQube分析失败

[英]SonarQube analysis of Java module fails in Jenkins

我创建了一个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值的顺序sonar.sources (即JavaScript后跟Java或Java后跟JavaScript)。 我看了其他StackOverflow问题(例如Sonar使用JENKINS分析Maven 3和多语言项目 )。 显然,他们也指定了类文件的位置。 也许在Jenkins构建步骤中对Java代码进行了编译以进行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.xml也会发生例外, sonar.sources=./java-module-name/src/main,./java-module-name/pom.xmlsonar.sources=./java-module-name/src/main/java,./java-module-name/pom.xml

我究竟做错了什么?

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

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

参见5.2中的Project.class

stacktrace指向surefire。 您正在使用哪个版本?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM