20
votes

I'm running sonarqube with maven.

I have installed it using following way. Using brew, I installed mysql and sonar.

When I run I get 7 critical bugs but the code coverage for 88 tests is zero Sonarqube analysis

When I run it with IntelliJ's tools, I get the following results. (not zero!) IntelliJ analysis

This is when I check Jacoco results directly. In $base_direc/target/jacoco/index.html
Jacoco results

The same code when run with sonar-scannersonar-scanner


This is my maven configuration
maven configuration

My ~/.m2/settings.xml
settings-pic1
settings-pic2


Edit 1: I have found this in logs. Db not supported


Edit2: I have edited ~/.m2/settings.xml added

<properties>
    <sonar.host.url>http://localhost:9000/</sonar.host.url>
</properties>

Edited /usr/local/Cellar/sonarqube/6.3.1/libexec/conf/sonar.properties added sonar.host.url=http://localhost:9000/

Edited /usr/local/etc/sonar-scanner.properties added - sonar.host.url=http://localhost:9000/

Ran the application in all above ways and the results were same, i.e, I could see Jacoco results but not in sonar.


Is it possible that if bugs are found sonar refuses to do code coverage?!

3
Anything relevant-seeming in your analysis log? If so, please edit your question to include that as well. - G. Ann - SonarSource Team
@G.Ann-SonarSourceTeam I have found something and edited the question. Please check, is that helpful - Tarun Maganti
is there anything related to the processing of the coverage reports? - G. Ann - SonarSource Team

3 Answers

18
votes

I found the solution -

The maven plugin I have included has configuration of Jacoco's destfile and datafile as ${basedir}/target/coverage-reports/jacoco-unit.exec

but by default sonar reads at ${basedir}/target/jacoco.exec. I changed the default at http://localhost:9000/settings?category=java


Ref: Sonar Code Coverage

0
votes

I've resolved this by using the following steps:

1.To begin, I've add configuration in our pom.xml.

<properties>
  <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
  <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
  <sonar.language>java</sonar.language>
</properties>

2.In sonarqube properties file added the below part.

sonar.projectName=${JOB_NAME}
sonar.projectVersion=1.0.0
sonar.sources=src/main
sonar.sourceEncoding=UTF-8
sonar.language=java
sonar.tests=src/test
sonar.junit.reportsPath=target/surefire-reports
sonar.surefire.reportsPath=target/surefire-reports
sonar.jacoco.reportPath=target/jacoco.exec
sonar.binaries=target/classes
sonar.java.coveragePlugin=jacoco
sonar.verbose=true

0
votes

I had same problem, I will help you to resolve that. Here 1st thing is to walk through your pom file.

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <jacoco.version>0.8.5</jacoco.version>
    <sonar.jacoco.reportPath>target/jacoco-ut.exec</sonar.jacoco.reportPath>
    <sonar.jacoco.itReportPaths>target/jacoco-it.exec</sonar.jacoco.itReportPaths>
</properties>

In pom file, you used jacoco-ut.exec you have to use below properties on your execute SonarQube Scanner in Jenkins

sonar.java.binaries=target/classes
sonar.junit.reportsPath=target/surefire-reports
sonar.surefire.reportsPath=target/surefire-reports
sonar.jacoco.reportPath=target/jacoco-ut.exec

Keep in your mind about jacoco.exec in pom and property name of executing SonarQube Scanner in Jenkins