plugin edition developer sonarqube jacoco

edition - sonarqube slack



JaCoCo SonarQube versiĆ³n incompatible 1007 (8)

Estoy usando SonarQube para el control de calidad del código y de repente las compilaciones que de otro modo pasarían no pueden analizarse y fallan.

[INFO] [00: 00: 03.630] Analizando /mySuperProject/target/jacoco.exec -> java.io.IOExcepción: Versión incompatible 1007

Cuando invoco la construcción de Maven con el interruptor de depuración, se revela esta causa

Caused by: java.io.IOException: Incompatible version 1007. at org.jacoco.core.data.ExecutionDataReader.readHeader(ExecutionDataReader.java:127) at org.jacoco.core.data.ExecutionDataReader.readBlock(ExecutionDataReader.java:107) at org.jacoco.core.data.ExecutionDataReader.read(ExecutionDataReader.java:87) at org.sonar.plugins.jacoco.AbstractAnalyzer.readExecutionData(AbstractAnalyzer.java:134) at org.sonar.plugins.jacoco.AbstractAnalyzer.analyse(AbstractAnalyzer.java:107)

Al inspeccionar ExecutionDataReader de jacoco, descubrí que se lanza una excepción desde

if (version != ExecutionDataWriter.FORMAT_VERSION) { throw new IOException(format("Incompatible version %x.",Integer.valueOf(version))); }

y de ExecutionDataWriter descubrí

/** File format version, will be incremented for each incompatible change. */ public static final char FORMAT_VERSION = 0x1007;

¿Qué es este cambio incompatible y por qué sucede? ¿Alguna idea de cómo solucionar este desafío?


Cambié pom.xml como

groupId=org.jacoco artifactId=jacoco-maven-plugin version=0.8.4-SNAPSHOT

funciono para mi


Como lo mencionó kdowbecki, este error probablemente se deba a una actualización de jacoco-maven-plugin.

Es muy probable que su SonarQube ahora esté usando la nueva versión de Jacoco Maven Plugin (probablemente el nuevo 0.7.5.201505241946) pero en realidad está intentando leer una versión anterior de un jacoco.exec (en su caso, podría estar leyendo un jacoco.exec generado por jacoco maven plugin versión 0.7.4.201502262128) que resulta en una incompatibilidad lanzada por JaCoCo.

Para solucionar este problema, debe asegurarse de que todos sus trabajos SonarQube / Jenkins generen un informe JaCoCo cada vez y no confíen en una versión anterior de jacoco.exec que podría haber sido generada por un trabajo anterior.


Como ya se mencionó, esto se debe a una interrupción en el código del complemento Maven de JaCoCo. Puede (temporalmente) especificar la versión en su comando jenkins maven como:

clean org.jacoco:jacoco-maven-plugin:<version>:prepare-agent install

p.ej

clean org.jacoco:jacoco-maven-plugin:0.7.4.201502262128:prepare-agent install

Esta fue la solución que nos ayudó. Pero como la mayoría de la gente, todavía estoy esperando que llegue la solución.


Correr:

mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install mvn org.jacoco:jacoco-maven-plugin:prepare-agent clean install -Pcoverage-per-test mvn sonar:sonar

Esto volverá a generar archivos .exec creados por versiones anteriores de jacoco.


Intente actualizar el complemento de Java en el Centro de actualizaciones de SonarQube, esto funciona para mí. Actualicé el complemento de Java de la versión 2.4 a la última 3.13.1.

Centro de actualizaciones de SonarQube -> Actualizaciones de complementos -> Java


Lo más probable es que sea causado por la última actualización de jacoco-maven-plugin. Todo funcionaba en 0.7.4.201502262128 pero hoy cambiamos a 0.7.5.201505241946, lo que resultó en este error.


Lo que hice fue especificar la versión de jacoco en mi proyecto maven.

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

Eso soluciona mi problema!


Para mí esto, cuando hago una mvn install

Error while creating report: Cannot read execution data version 0x1006. This version of JaCoCo uses execution data version 0x1007

significaba que había generado un arquetipo pero el arquetipo accidentalmente incluía el directorio de destino con viejos archivos jacoco (o había sido registrado en git por accidente). Hacer una limpieza de mvn primero (y registrar eso) solucionó el problema. Supongo que jacoco es reacio a sobrescribir el archivo jacoco.exec con uno nuevo cuando no hay pruebas unitarias para ejecutar o algo así, por lo que el archivo antiguo se conserva e intenta usarse para el informe jacoco. FWIW ...

En general, significa una discrepancia de versión de generador vs. reportero.