簡體   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