I am trying to use SonarQube on a very basic C++ project. I use CppUnit for my tests, which generate an xml report.
I use the SonarQube C++ community plugin, but i did not manage to show my tests results in SonarQube.
Here is my sonar-project.properties file
# Required metadata
sonar.projectKey=test
sonar.projectName=C++ Project Test
sonar.projectVersion=1.0
# Comma-separated paths to directories with sources (required)
sonar.sources=./
# Language
sonar.language=c++
# Encoding of the source files
sonar.sourceEncoding=UTF-8
# Path to the directory containing the CPPUnit reports
sonar.cxx.xunit.xsltURL=report/cppunit/cppunit-1.x-to-junit-1.0.xsl
sonar.cxx.xunit.reportPath=report/cppunit/cppunit-report.xml
I found out on internet that a xslt conversion was needed for SonarQube to be able to read CppUnit reports.
I run sonar-runner -X in my project folder to start analysis.
- When I try to use it without the xslt conversion, I have no errors but there is nothing mentionned about tests on SonarQube web interface (like it did not executed).
- When I use the xslt conversion I have this error :
Transforming the report using xslt 'report/cppunit/cppunit-1.x-to-junit-1.0.xsl'
10:21:36.793 DEBUG - Transforming: try to access external XSLT via URL
10:21:36.794 ERROR - Cannot feed the data into SonarQube, details: 'java.net.MalformedURLException: no protocol: report/cppunit/cppunit-1.x-to-junit-1.0.xsl'
INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
Total time: 7.589s
Final Memory: 21M/292M
INFO: ------------------------------------------------------------------------
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.IllegalStateException: Cannot feed the data into SonarQube, details: 'java.net.MalformedURLException: no protocol: report/cppunit/cppunit-1.x-to-junit-1.0.xsl'
at org.sonar.plugins.cxx.tests.xunit.CxxXunitSensor.analyse(CxxXunitSensor.java:159)
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.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:83)
at org.sonar.batch.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:192)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127)
at org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.java:241)
at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:236)
at org.sonar.batch.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:226)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127)
at org.sonar.batch.task.ScanTask.execute(ScanTask.java:47)
at org.sonar.batch.task.TaskContainer.doAfterStart(TaskContainer.java:86)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127)
at org.sonar.batch.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:106)
at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:119)
at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:79)
at org.sonar.runner.batch.IsolatedLauncher.execute(IsolatedLauncher.java:48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:87)
... 9 more
Caused by: java.net.MalformedURLException: no protocol: report/cppunit/cppunit-1.x-to-junit-1.0.xsl
at java.net.URL.<init>(URL.java:593)
at java.net.URL.<init>(URL.java:490)
at java.net.URL.<init>(URL.java:439)
at org.sonar.plugins.cxx.tests.xunit.CxxXunitSensor.transformReport(CxxXunitSensor.java:265)
at org.sonar.plugins.cxx.tests.xunit.CxxXunitSensor.analyse(CxxXunitSensor.java:135)
... 33 more
Anybody has an idea on how to fix this problem ? Or a tutorial or something else which shows how to use CppUnit reports in SonarQube ? I searched for several hours but I did not find anything to fix it.
My problem is fixed. It looks like the path to the xslt conversion file begins where the cppunit xml file is.
In my case, I had to replace this:
sonar.cxx.xunit.xsltURL=report/cppunit/cppunit-1.x-to-junit-1.0.xsl
by this :
sonar.cxx.xunit.xsltURL=cppunit-1.x-to-junit-1.0.xsl