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,

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.