maven - tool - SonarQube no recoge la cobertura de prueba unitaria
cobertura tool (5)
Basado en https://github.com/SonarSource/sonar-examples/blob/master/projects/tycho/pom.xml , el siguiente POM funciona para mí:
<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>
- Establecer el archivo de destino en la ruta del informe garantiza que Sonar lea exactamente el archivo que genera JaCoCo.
- La ruta del informe debe estar fuera de los directorios de los proyectos para tener en cuenta la cobertura entre proyectos (por ejemplo, en el caso de Tycho, donde la convención debe tener proyectos separados para las pruebas).
- La configuración
reuseReports
evita la eliminación del archivo de informe JaCoCo antes de que se lea. (Desde 4.3, este es el valor predeterminado y está en desuso).
Entonces solo corro
mvn clean install
mvn sonar:sonar
Estoy teniendo problemas con el sonar que recoge el informe de análisis de jacoco. Sin embargo, Jenkins puede recoger el informe y mostrar los resultados. Mi proyecto es una construcción maven, construida por Jenkins. El informe de jacoco es generado por maven (configurado en el pom). Sonar se ejecuta utilizando el plugin Jenkins.
Esto es lo que veo en SonarQube:
Este es el informe que puedo ver del proyecto en jenkins.
La configuración del complemento maven:
<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>
Configuración de Jenkins Sonar Plugin
Incluye los complementos sunfire y jacoco en el pom.xml y ejecuta el comando maven como se indica a continuación.
mvn jacoco: prepare-agent jacoco: informe 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>
Jenkins no muestra los resultados de cobertura, ya que es un problema de compatibilidad de versiones entre el plugin jenkins jacoco y el plugin maven jacoco. Por mi parte, lo arreglé usando una versión más reciente del 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>
Te faltaban algunas propiedades de sonar importantes. Aquí hay una muestra de uno de mis compilaciones:
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
El error en la salida de la consola de Jenkins puede ser bastante útil para que la cobertura del código funcione.
La cobertura del proyecto se establece en 0% ya que no hay directorios con clases.
Indica que no ha configurado correctamente la propiedad Sonar.Binaries
No hay información sobre la cobertura por prueba
Indica que no ha configurado correctamente la propiedad Sonar.Tests
La información de cobertura no fue recopilada. ¿Quizás olvidó incluir información de depuración en clases compiladas? Indica que la propiedad sonar.binaries se estableció correctamente, pero esos archivos no se compilaron en modo de depuración, y deben ser
Tuve el problema similar, cobertura del 0.0% y pruebas de unidades no cuentan en el tablero Sonar con SonarQube 6.7.2: Maven: 3.5.2, Java: 1.8, Jacoco: trabajado con 7.0 / 7.9 / 8.0, sistema operativo: Windows
Después de muchas dificultades para encontrar la solución correcta en el proyecto multi-módulo maven, no es como un proyecto de módulo único aquí, tenemos que decir para elegir informes de jacoco de módulos individuales y fusionarlo en un solo informe, así resolvió el problema con esta configuración ya que mi padre se ve me gusta:
<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>
He intentado algunas otras opciones como jacoco-aggregate e incluso la creación de un submódulo al incluir eso en el pom padre, pero nada funcionó realmente y esto es simple. Veo en los registros <sonar.jacoco.reportPath>
está en desuso, pero sigue funcionando como está y parece que se reemplazó automáticamente en la ejecución o se puede actualizar manualmente a <sonar.jacoco.reportPaths>
o más reciente. Una vez realizada la configuración en cmd, comience con mvn clean install y luego mvn org.jacoco: jacoco-maven-plugin: prepare-agent install (Compruebe en la carpeta de destino del proyecto si jacoco.exec se ha creado) y luego mvn sonar: sonar , esto es lo que he intentado, por favor avíseme si hay alguna otra solución mejor disponible. Espero que esto ayude !! Si no, publique su pregunta ...