Как запустить статический анализ библиотеки, написанного на языке СИ, с компиляцией для SonarQube?
Имеется библиотека GSL (gnu scientific library) версии 2.7.1. которую я хочу проанализировать с помощью метода статического анализа. Для анализа использовать sonar-scanner и плагин sonar-cxx (для поддержки языков C/C++) для SonarQube Community.
Я запускал анализ без сборки, но проблема в том, что при таком методе анализатор не понимал какие методы где находятся и в итоге 0 уязвимостей и ошибок (только дефекты кода).
Для данного плагина (sonar-cxx) есть три способа запустить анализ вместе с сборкой: https://github.com/SonarOpenCommunity/sonar-cxx/wiki/Compilers
Я использовать JSON Compilation Database. JSON файл создавал с помощью утилиты bear. Использовал команды в корневом каталоге библиотеки GSL:
./configure --prefix=/home/gsl/gsl-install #обозначение место установки библиотеки и генерация Make файлов
bear --use-cc - make #получение JSON файла компиляции.
sonar-project.properties:
# must be unique in a given instance
sonar.projectKey=gsl-with-build
sonar.language = cxx
# Path is relative to the sonar-project.properties file. Defaults to .
sonar.sources=.
sonar.host.url=http://localhost:9000
# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8
sonar.cxx.jsonCompilationDatabase=compile_commands.json
# mandatory: files to be handled by the _cxx plugin_
sonar.cxx.file.suffixes=.c,.h
Запустил анализ командой:
sonar-scanner \
-Dsonar.projectKey=gsl-with-build \
-Dsonar.sources=. \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.token=sqp_9f65d495c56f4f78a18eae24ba628a7f1e381c81
И получил ошибку:
ERROR: Error during SonarScanner execution
java.lang.IllegalArgumentException: expected one element but was: <gsl/gsl_statistics_float.h, statistics/gsl_statistics_float.h>
at org.sonar.api.batch.fs.internal.DefaultFileSystem.inputFile(DefaultFileSystem.java:130)
at org.sonar.scanner.scan.filesystem.MutableFileSystem.inputFile(MutableFileSystem.java:53)
at org.sonar.plugins.cxx.CxxSquidSensor.save(CxxSquidSensor.java:423)
at org.sonar.plugins.cxx.CxxSquidSensor.execute(CxxSquidSensor.java:335)
at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:64)
at org.sonar.scanner.sensor.ProjectSensorsExecutor.execute(ProjectSensorsExecutor.java:52)
at org.sonar.scanner.scan.SpringProjectScanContainer.doAfterStart(SpringProjectScanContainer.java:371)
at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:188)
at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:167)
at org.sonar.scanner.bootstrap.SpringGlobalContainer.doAfterStart(SpringGlobalContainer.java:137)
at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:188)
at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:167)
at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:72)
at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:66)
at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
at com.sun.proxy.$Proxy0.execute(Unknown Source)
at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:189)
at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:138)
at org.sonarsource.scanner.cli.Main.execute(Main.java:126)
at org.sonarsource.scanner.cli.Main.execute(Main.java:81)
at org.sonarsource.scanner.cli.Main.main(Main.java:62)
ERROR:
ERROR: Re-run SonarScanner using the -X switch to enable full debug logging.
Из-за чего данная ошибка? Есть ли возможность запустить анализ с компиляцией для плагина sonar-cxx с помощью остальных способов для данной библиотеки? Можно ли использовать что то помимо sonar-scanner, который поддерживает SonarQube?