SonarQube não captou a cobertura do ensaio unitário

Estou a ter problemas com o sonar a recolher o relatório de análise do jacoco. Jenkins, no entanto, é capaz de pegar o relatório e exibir os resultados. O meu projecto é uma construção maven, construída pelo Jenkins. O relatório jacoco é gerado pelo maven (configurado no pom). O Sonar é executado usando o plugin Jenkins.

Isto é o que vejo no SonarQube.

SonarQube Screen Capture

Este é o relatório que vejo do projecto no jenkins.

Jacoco report in Jenkins

o plugin maven configuração:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.6.4.201312101107</version>
    <executions>
      <execution>
        <id>default-prepare-agent</id>
        <goals>
            <goal>prepare-agent</goal>
        </goals>
      </execution>
      <execution>
        <id>default-report</id>
        <phase>prepare-package</phase>
        <goals>
            <goal>report</goal>
        </goals>
      </execution>
      <execution>
          <id>default-check</id>
          <goals>
              <goal>check</goal>
          </goals>
      </execution>
    </executions>
</plugin>
Configuração do 'plugin' de Sonar Jenkins enter image description here

Author: Vini.g.fer, 2014-03-04

5 answers

Faltava-te algumas propriedades sonares importantes, aqui está uma amostra de uma das minhas construções:

sonar.jdbc.dialect=mssql
sonar.projectKey=projectname
sonar.projectName=Project Name
sonar.projectVersion=1.0
sonar.sources=src
sonar.language=java
sonar.binaries=build/classes
sonar.tests=junit
sonar.dynamicAnalysis=reuseReports
sonar.junit.reportsPath=build/test-reports
sonar.java.coveragePlugin=jacoco
sonar.jacoco.reportPath=build/test-reports/jacoco.exec

O erro na saída da consola Jenkins pode ser bastante útil para fazer com que a cobertura de código funcione.

a cobertura do projecto está definida em 0%, uma vez que não existem pastas com classes.
indica que não puseste o Sonar.Propriedade binária correctamente

nenhuma informação sobre a cobertura por teste
indica que não ajustaste o Sonar.Teste propriedade propriamente dita

a informação de cobertura não foi coletada. Talvez se tenha esquecido de incluir a informação de depuração nas classes compiladas? indica que o sonar.a propriedade dos binários foi configurada corretamente, mas esses arquivos não foram compilados no modo de depuração, e eles precisam ser

 53
Author: Cole9350, 2014-03-05 14:49:45

Com base em https://github.com/SonarSource/sonar-examples/blob/master/projects/tycho/pom.xml , o seguinte POM funciona para mim:

<properties>
    <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
    <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
    <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.7.0.201403182114</version>
            <executions>
                <execution>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <destFile>${sonar.jacoco.reportPath}</destFile>
            </configuration>
        </plugin>
    </plugins>
</build>
    Definir o ficheiro de destino para a localização do relatório garante que o Sonar lê exactamente o ficheiro que o JaCoCo gera.
  • a trajectória do relatório deve estar fora das listas dos projectos para ter em conta a cobertura cruzada dos projectos (por exemplo, no caso de Tycho, em que a Convenção deverá ter projectos separados para testes).
  • O reuseReports a configuração evita a exclusão do arquivo de relatório JaCoCo antes de ser lido! (Desde 4.3, Este é o padrão e é depreciado.)

Então eu apenas corro

mvn clean install
mvn sonar:sonar
 9
Author: thSoft, 2015-09-21 13:07:50

Eu tinha o mesmo problema, cobertura de 0.0 % e nenhum teste de unidade conta com painel de sonar com SonarQube 6.7.2: Maven: 3.5.2, Java: 1.8, Jacoco: trabalhou com 7.0/7.9/8.0, OS: Windows

Depois de muito esforço para encontrar uma solução correcta no projecto multi-módulo maven,não como o projecto de um único módulo aqui, temos de dizer para escolher os relatórios jacoco de módulos individuais e juntar-nos a um relatório, por isso resolvemos o problema com esta configuração, dado que o meu pom pai se parece com:

 <properties>
            <!--Sonar -->
            <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
            <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
        <sonar.jacoco.reportPath>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPath>
            <sonar.language>java</sonar.language>

        </properties>

        <build>
            <pluginManagement>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <configuration>
                            <source>1.5</source>
                            <target>1.5</target>
                        </configuration>
                    </plugin>

                    <plugin>
                        <groupId>org.sonarsource.scanner.maven</groupId>
                        <artifactId>sonar-maven-plugin</artifactId>
                        <version>3.4.0.905</version>
                    </plugin>

                    <plugin>
                        <groupId>org.jacoco</groupId>
                        <artifactId>jacoco-maven-plugin</artifactId>
                        <version>0.7.9</version>
                        <configuration>
                            <destFile>${sonar.jacoco.reportPath}</destFile>
                            <append>true</append>
                        </configuration>
                        <executions>
                            <execution>
                                <id>agent</id>
                                <goals>
                                    <goal>prepare-agent</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

                </plugins>
            </pluginManagement>
        </build>

Eu tenho tentou algumas outras opções como jacoco-agregado & até mesmo criar um sub-módulo, incluindo isso no pom pai, mas nada realmente funcionou & isto é simples. Eu vejo em logs <sonar.jacoco.reportPath> está desactualizado, mas ainda funciona como está e parece ser auto substituído na execução ou pode ser manualmente atualizado para <sonar.jacoco.reportPaths> ou mais recente. Uma vez depois de fazer a configuração no cmd, comece com mvn clean install Depois mvn org.jacoco: 'plugin' jacoco-maven: Install do preparo-agent (verifique na pasta de destino do projecto se jacoco.exec is created) & then do mvn sonar: sonar , This is what i've tried please let me know if some other best possible solution available.Espero que isto ajude!! Se não, por favor, publique a sua pergunta..

 4
Author: srinivas y, 2018-04-15 23:12:28

Jenkins não mostra resultados de cobertura, pois é um problema de compatibilidades de Versão entre jenkins jacoco plugin e Maven jacoco plugin. Do meu lado, eu corrigi-lo usando uma versão mais recente do plugin maven jacoco

<build>
   <pluginManagement>
     <plugins>
       <plugin>
         <groupId>org.jacoco</groupId>
         <artifactId>jacoco-maven-plugin</artifactId>
         <version>0.7.9</version>
       </plugin>
     <plugins>
   <pluginManagement>
<build>
 1
Author: TomateEtCarotte, 2017-03-21 09:18:30
Incluem os plugins sunfire e jacoco no pom.xml e Execute o comando maven como indicado em baixo.

Mvn jacoco: preparador-agente jacoco: relatório sonar: sonar

<properties>
    <surefire.version>2.17</surefire.version>
    <jacoco.version>0.7.2.201409121644</jacoco.version>

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>${surefire.version}</version>
        </plugin> 

        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>${jacoco.version}</version>

            <executions>
                <execution>
                    <id>default-prepare-agent</id>
                    <goals><goal>prepare-agent</goal></goals>
                </execution>
                <execution>
                    <id>default-report</id>
                    <phase>prepare-package</phase>
                    <goals><goal>report</goal></goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
 0
Author: Raghav Mo, 2017-04-18 09:47:08