SonarQube não captou a cobertura do ensaio unitário
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
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
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
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..
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>
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>