J'utilise SonarQube pour le contrôle de la qualité du code et des constructions soudaines qui passeraient sinon ne peuvent pas être analysées et échouent.
[INFO] [00: 00: 03.630] Analyse de /mySuperProject/target/jacoco.exec -> Java.io.IOException: version incompatible 1007
Lorsque j'appelle maven build avec un commutateur de débogage, cette cause est révélée
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)
Lors de l'inspection de jacoco ExecutionDataReader, j'ai constaté que cette exception est levée de
if (version != ExecutionDataWriter.FORMAT_VERSION) {
throw new IOException(format("Incompatible version %x.",Integer.valueOf(version)));
}
et de ExecutionDataWriter j'ai découvert
/** File format version, will be incremented for each incompatible change. */
public static final char FORMAT_VERSION = 0x1007;
Qu'est-ce que ce changement incompatible et pourquoi cela se produit-il? Des idées pour résoudre ce problème?
Comme déjà mentionné, cela est dû à une rupture dans le code du plug-in JaCoCo maven . Vous pouvez (temporairement) spécifier la version dans votre commande jenkins maven comme suit:
clean org.jacoco:jacoco-maven-plugin:<version>:prepare-agent install
par exemple.
clean org.jacoco:jacoco-maven-plugin:0.7.4.201502262128:prepare-agent install
C’est la solution de contournement qui nous a aidés. Mais comme la plupart des gens, j'attends toujours que le correctif arrive.
Ce que j'ai fait était de spécifier la version jacoco dans mon projet 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>
Cela corrige mon problème!
Cela est probablement dû à la dernière mise à jour de jacoco-maven-plugin. Tout fonctionnait sur 0.7.4.201502262128 mais aujourd'hui nous sommes passés à 0.7.5.201505241946, ce qui a entraîné cette erreur.
Essayez de mettre à jour le plug-in Java dans le centre de mise à jour SonarQube, cela fonctionne pour moi. J'ai mis à jour le plugin Java de la version 2.4 à la dernière version 3.13.1.
Centre de mise à jour SonarQube -> Mises à jour des plugins -> Java
Courir:
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
Cela recréera les fichiers .exec
créés par les anciennes versions de jacoco.
Comme le mentionnait kdowbecki, cette erreur est probablement due à une mise à jour de jacoco-maven-plugin.
Votre SonarQube utilise probablement la nouvelle version de Jacoco Maven Plugin (probablement le nouveau 0.7.5.201505241946), mais tente en réalité de lire une ancienne version d’un fichier jacoco.exec (dans votre cas, il s'agit peut-être d'un fichier jacoco.exec généré par jacoco maven plugin version 0.7.4.201502262128) entraînant une incompatibilité générée par JaCoCo.
Pour résoudre ce problème, vous devez vous assurer que tous vos travaux SonarQube/Jenkins génèrent un rapport JaCoCo à chaque fois et ne comptez pas sur une version plus ancienne de jacoco.exec qui aurait pu être générée par un travail précédent.
Pour moi cela, en faisant un mvn install
Error while creating report: Cannot read execution data version 0x1006. This version of JaCoCo uses execution data version 0x1007
signifiait que j'avais créé un archétype mais que celui-ci incluait accidentellement le répertoire cible contenant d'anciens fichiers jacoco (ou avait été coché dans git par accident). Faire un mvn en premier (et en vérifiant cela) a résolu le problème. Je suppose que jacoco est réticent à remplacer le fichier jacoco.exec par un nouveau fichier lorsqu'il n'y a pas de tests unitaires à exécuter ou quelque chose du genre, de sorte que l'ancien fichier est préservé et utilisé pour le rapport jacoco. FWIW ...
En général, cela signifie une incompatibilité version entre le générateur et le journaliste.
J'ai changé pom.xml comme
groupId=org.jacoco
artifactId=jacoco-maven-plugin
version=0.8.4-SNAPSHOT
ça a fonctionné pour moi