Warning for not using compile_commands.json

Hello,

Must-share information (formatted with Markdown):

  • which versions are you using (SonarQube Server / Community Build, Scanner, Plugin, and any relevant extension)
    SonarQube Developer Edition v10.7

  • how is SonarQube deployed: zip, Docker, Helm
    Docker container

  • what are you trying to achieve
    I am using MSBuild to build several .sln solutions in a Jenkins pipeline. The MSBuild command is launched using a build wrapper downloaded from my sonarqube instance, and this call is contained between sonar-scanner “begin” and “end” commands.

I got a warning about not using compile_commands.json:

“Property ‘sonar.cfamily.build-wrapper-output’ is deprecated; build-wrapper now generates a compilation database.
Please use the property ‘sonar.cfamily.compile-commands’ instead to specify the path of the ‘compile_commands.json’ file generated inside the build-wrapper output directory.”

  • what have you tried so far to achieve this
    So i replaced my sonar-scanner command arguments with /d:sonar.cfamily.compile-commands="bw-output\compile_commands.json".

In 2/3 .sln files everything is fine, but for the 3rd I get this error:

ERROR: Error during SonarScanner execution
java.util.NoSuchElementException: No value present
	at java.base/java.util.Optional.orElseThrow(Unknown Source)
	at com.sonar.cpp.analyzer.MsvcDriver.getIncludeFromDevCmd(MsvcDriver.java:603)
	at com.sonar.cpp.analyzer.AutoScanDependencyHandler.detectMSVC(AutoScanDependencyHandler.java:151)
	at com.sonar.cpp.analyzer.AutoScanDependencyHandler.loadLocalHostLibraries(AutoScanDependencyHandler.java:87)
	at com.sonar.cpp.analyzer.AutoScanDependencyHandler.loadLibraries(AutoScanDependencyHandler.java:346)
	at com.sonar.cpp.plugin.CFamilySensor$AutoScanUtils.getAutoScanActions(CFamilySensor.java:883)
	at com.sonar.cpp.plugin.CFamilySensor$AutoScanUtils.fillAutoScanFilesToBeAnalyzed(CFamilySensor.java:830)
	at com.sonar.cpp.plugin.CFamilySensor.process(CFamilySensor.java:587)
	at com.sonar.cpp.plugin.CFamilySensor.processConfigurationReader(CFamilySensor.java:503)
	at com.sonar.cpp.plugin.CFamilySensor.process(CFamilySensor.java:233)
	at com.sonar.cpp.plugin.CFamilySensor.execute(CFamilySensor.java:183)
	at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:64)
	at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:88)
	at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:64)
	at org.sonar.scanner.scan.SpringModuleScanContainer.doAfterStart(SpringModuleScanContainer.java:82)
	at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:226)
	at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:205)
	at org.sonar.scanner.scan.SpringProjectScanContainer.scan(SpringProjectScanContainer.java:204)
	at org.sonar.scanner.scan.SpringProjectScanContainer.scanRecursively(SpringProjectScanContainer.java:200)
	at org.sonar.scanner.scan.SpringProjectScanContainer.doAfterStart(SpringProjectScanContainer.java:173)
	at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:226)
	at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:205)
	at org.sonar.scanner.bootstrap.SpringScannerContainer.doAfterStart(SpringScannerContainer.java:351)
	at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:226)
	at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:205)
	at org.sonar.scanner.bootstrap.SpringGlobalContainer.doAfterStart(SpringGlobalContainer.java:144)
	at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:226)
	at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:205)
	at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:73)
	at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67)
	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 jdk.proxy1/jdk.proxy1.$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: 
The SonarScanner did not complete successfully
16:17:00.434  Post-processing failed. Exit code: 1

Here is the commands I launch, I am not very familiar with sonarqube execution and might not see an obvious issue, but I tried my best to follow documentation recommendations.

                            bat """\"${scannerHome}\\SonarScanner.MSBuild.exe\" begin /k:\"Backend\" /d:sonar.token=\"my_token\"  /d:sonar.host.url=\"my_URL\" /d:sonar.branch.name=${sonarqubeBranchName} /d:sonar.projectBaseDir=\"C:\\work\\workspace\" /d:sonar.scm.provider=\"git\" /d:sonar.cfamily.build-wrapper-output=\"bw-output-quantum\" /d:sonar.exclusions=\"**\\unittest\\**, **\\unittests\\**, **\\test\\**, **\\Caturacy\\**, **\\*.UnitTest\\**, **\\test*.*, **\\*.build\\**, **\\*.packages\\** /d:sonar.verbose=true /d:sonar.cfamily.compile-commands=\"bw-output-guidance\\compile_commands.json\" """
                            bat """\".sonar\\build-wrapper-win-x86\\build-wrapper-win-x86-64.exe\" --out-dir bw-output-quantum \"${tool 'MSBuildTool'}\" build/Backend.sln /restore /p:Platform=x64 /p:Configuration=Release /m /p:BuildInParallel=true /nodeReuse:false"""
                            bat "\"${scannerHome}\\SonarScanner.MSBuild.exe\" end /d:sonar.token=\"my_token\""

Thank you in advence for your time and help.
Best Regards

Hello @s.livain

I wanted to let you know that you don’t need to provide both sonar.cfamily.compile-commands and sonar.cfamily.build-wrapper-output. The sonar.cfamily.build-wrapper-output needs to be removed.

Could you please share the complete logs with us? If you prefer to share them privately, I can open a private thread for you.

Thanks,

Hello Mostafa,

Thank you for you reply. I took out the unnecessary argument and it seems to be running perfectly.

Thanks again for your help!
Have a great day

Hello @s.livain,

I’m glad that this worked for you, however, it appears that you’re encountering a corner case. Typically, specifying both compile-commands and build-wrapper-output should result in an error message similar to the following:

One configuration property is expected, 2 were found:
  "sonar.cfamily.build-wrapper-output"
  "sonar.cfamily.compile-commands"

Since you didn’t encounter this error, it would be helpful if you could share the verbose logs. This will assist us in investigating why this error message didn’t appear.

Thanks,