SonarQube анализ модуля Java терпит неудачу в Дженкинсе


Я создал проект 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

Сборка Дженкинса завершается со следующей ошибкой:

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 и multi language project используя Дженкинса ). Очевидно, что они также определяют местоположение файла классов. Возможно, код 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.xml, sonar.sources=./java-module-name/src/main,./java-module-name/pom.xml и sonar.sources=./java-module-name/src/main/java,./java-module-name/pom.xml.

Что я делаю не так?

1 2

1 ответ:

Ошибка появляется только при включении Java-источников? Так что, возможно, вы используете некоторые устаревшие плагины на вашем 5.2, которые запускаются при анализе Java и используют больше не доступный метод getPom().

org.sonar.api.resources.Project.getPom() больше не доступен в SQ 5.2.

Смотрите Проект.класс в 5.2

Stacktrace указывает на surefire. Какую версию вы используете?