- which versions are you using (SonarQube, Scanner, Plugin, and any relevant extension)
SonarQube 6.7
SonarQube Scanner 3.3.0.1492
- what are you trying to achieve
Get code coverage for ios project with mixed Objective C and Swift
- what have you tried so far to achieve this
We enabled plugin for Swift & Objective C at server side, as ObjectiveC.png and Swift.png
Then i format sonar-project.properties as:
sonar.projectKey=iOSProjectKey
sonar.projectName=iOSProjectName
sonar.projectVersion=4.5.0
sonar.c.file.suffixes=
sonar.objc.file.suffixes=.h,.m
sonar.swift.file.suffixes=.swift
sonar.sources=iOSProject
sonar.sourceEncoding=UTF-8
sonar.cfamily.build-wrapper-output=OurBuildFolderAtSamePlaceWithSonarProjectPropertiesFile
We also attached two images ObjectiveC.png & Swift.png to show the configuration at our Sonar Server now.
After running sonar-scanner command, the output has error as below:
13:43:15.861 ERROR: Lizard Report not found <ProjectPath>/sonar-reports/lizard-report.xml
java.io.FileNotFoundException: <ProjectPath>/sonar-reports/lizard-report.xml (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:623)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:148)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:805)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:205)
at com.backelite.sonarqube.swift.complexity.LizardReportParser.parseReport(LizardReportParser.java:67)
at com.backelite.sonarqube.swift.complexity.LizardSensor.execute(LizardSensor.java:63)
at org.sonar.scanner.sensor.SensorWrapper.analyse(SensorWrapper.java:53)
at org.sonar.scanner.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:88)
at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:82)
at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:68)
at org.sonar.scanner.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:88)
at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:177)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121)
at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:291)
at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:286)
at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:264)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121)
at org.sonar.scanner.task.ScanTask.execute(ScanTask.java:48)
at org.sonar.scanner.task.TaskContainer.doAfterStart(TaskContainer.java:84)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121)
at org.sonar.scanner.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:121)
at org.sonar.batch.bootstrapper.Batch.doExecuteTask(Batch.java:116)
at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:71)
at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
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.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:185)
at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:137)
at org.sonarsource.scanner.cli.Main.execute(Main.java:111)
at org.sonarsource.scanner.cli.Main.execute(Main.java:75)
at org.sonarsource.scanner.cli.Main.main(Main.java:61)
13:43:15.861 INFO: Sensor Lizard [backelitesonarswiftplugin] (done) | time=19ms
13:43:15.861 INFO: Sensor JavaXmlSensor [java]
13:43:15.872 INFO: Sensor JavaXmlSensor [java] (done) | time=11ms
13:43:15.872 INFO: Sensor HTML [web]
13:43:15.909 DEBUG: '< ProjectPath>/SupportingFiles/personal_info.html' generated metadata with charset 'UTF-8'
13:43:15.990 DEBUG: HtmlSensor: <ProjectPath>/SupportingFiles/personal_info.html: 0,0,1
13:43:16.018 INFO: Sensor HTML [web] (done) | time=146ms
13:43:16.018 INFO: Sensor SonarSwift [swift]
13:43:16.031 INFO: 27 source files to be analyzed
13:43:17.041 DEBUG: '<ProjectFolder_Path>/Extension.swift' generated metadata with charset 'UTF-8'
13:43:17.283 INFO: ------------------------------------------------------------------------
13:43:17.283 INFO: EXECUTION FAILURE
13:43:17.283 INFO: ------------------------------------------------------------------------
13:43:17.283 INFO: Total time: 12.628s
13:43:17.393 INFO: Final Memory: 29M/525M
13:43:17.393 INFO: ------------------------------------------------------------------------
13:43:17.394 ERROR: Error during SonarQube Scanner execution
java.lang.UnsupportedOperationException: Can not add the same measure twice on <ProjectPath >/Extension.swift: DefaultMeasure[component=<ProjectPath >/Extension.swift,metric=Metric[id=<null>,key=ncloc,description=Non commenting lines of code,type=INT,direction=-1,domain=Size,name=Lines of Code,qualitative=false,userManaged=false,enabled=true,worstValue=<null>,bestValue=<null>,optimizedBestValue=false,hidden=false,deleteHistoricalData=false,decimalScale=<null>],value=123,fromCore=false]
at org.sonar.scanner.sensor.DefaultSensorStorage.saveMeasure(DefaultSensorStorage.java:268)
at org.sonar.scanner.sensor.DefaultSensorStorage.store(DefaultSensorStorage.java:212)
at org.sonar.api.batch.sensor.measure.internal.DefaultMeasure.doSave(DefaultMeasure.java:95)
at org.sonar.api.batch.sensor.internal.DefaultStorable.save(DefaultStorable.java:45)
at com.sonar.swift.plugin.H.A(Unknown Source)
at com.sonar.swift.plugin.H.D(Unknown Source)
at com.sonar.swift.plugin.H.A(Unknown Source)
at com.sonar.swift.plugin.E.A(Unknown Source)
at com.sonar.swift.plugin.E.A(Unknown Source)
at com.sonar.swift.plugin.E.execute(Unknown Source)
at org.sonar.scanner.sensor.SensorWrapper.analyse(SensorWrapper.java:53)
at org.sonar.scanner.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:88)
at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:82)
at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:68)
at org.sonar.scanner.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:88)
at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:177)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121)
at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:291)
at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:286)
at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:264)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121)
at org.sonar.scanner.task.ScanTask.execute(ScanTask.java:48)
at org.sonar.scanner.task.TaskContainer.doAfterStart(TaskContainer.java:84)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121)
at org.sonar.scanner.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:121)
at org.sonar.batch.bootstrapper.Batch.doExecuteTask(Batch.java:116)
at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:71)
at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
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.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:185)
at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:137)
at org.sonarsource.scanner.cli.Main.execute(Main.java:111)
at org.sonarsource.scanner.cli.Main.execute(Main.java:75)
at org.sonarsource.scanner.cli.Main.main(Main.java:61)
From the error messages above, beside the error of âCan not add the same measure twice on .swiftâ, it also display error for lizard reports too.
But from the attached image, we have just enabled Objective C & Swift only. Why does SonarScanner need to display lizard report ?
Besides that, we tried to remove swift file which display error message to another folder, then rerun sonar-scanner again. This time, Sonar display the same error message to new swift file.
We really need Sonar Development Team support this case OR you can give us the link to sample which config Sonar to scan project which is mixed Objective C and Swift code.
We are discussing with your Sale department to buy the SonarQube to show CodeCoverage in our current project. If we can not run SonarQube with source code mixed ObjectiveC and Swift, it is hard for us to persuade our director to buy Sonar license.
We are looking forward to receiving your support as soon as possible.
Best regards,
Note: I tried to upload ObjectiveC.png image but your Community site has just allowed me upload 1 image at current topic. So i will post it later via email, have Miss Sara Sharpless help to send these two images to your development team.