JaCoCo SonarQube incompatible versión 1007


78

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

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

Cuando invoco la compilació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)

Mientras inspeccionaba jacoco ExecutionDataReader, encontré que la excepción se lanza desde

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

y de ExecutionDataWriter me enteré

/** 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é ocurre? ¿Alguna idea de cómo solucionar este desafío?


5
Se ha planteado un problema en el lado del complemento de Java de SonarQube: jira.codehaus.org/browse/SONARJAVA-1091 y debería solucionarse en la próxima versión. Este es un cambio radical por parte de JaCoCo. Dejemos un poco de tiempo para poder arreglarlo.
benzonico

Respuestas:


77

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 maven de jenkins 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.


1
Buen truco, en un entorno con muchos subproyectos que fue la solución más limpia hasta ahora
Padvinder

1
Esto se corrigió en la última versión del complemento Java
SonarQube

1
Sigo recibiendo este error con SonarQube 5.1.1. ¿Cómo forzar el último complemento de Java de SonarQube?
Davidfmatheson

3
Tuve que actualizar el complemento de Java dentro de mi instancia de SonarQube <SONAR_URL> / updatecenter / updates
davidfmatheson

32

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!


17

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


Yo también estoy viendo esto. ¿Tienes más información sobre esto?
Jared Burrows

6

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 .execarchivos creados por versiones anteriores de jacoco.


6

Intente actualizar el complemento de Java en el Centro de actualización 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 actualización de SonarQube -> Actualizaciones de complementos -> Java


2

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

Es muy probable que su SonarQube esté usando ahora la nueva versión de Jacoco Maven Plugin (probablemente la nueva 0.7.5.201505241946) pero en realidad está intentando leer una versión antigua 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 da como resultado una incompatibilidad lanzada por JaCoCo.

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


0

Para mi esto, al hacer un 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 hecho una generación de arquetipo, pero el arquetipo incluyó accidentalmente el directorio de destino con archivos antiguos de jacoco (o se había registrado en git por accidente). Hacer una limpieza de mvn primero (y verificarlo) resolvió 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 y se intenta utilizar para el informe de jacoco. FWIW ...

En general, significa una falta de coincidencia entre la versión del generador y el del reportero.


0

Cambié pom.xml como

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

funcionó para mi

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.