Ich verwende SonarQube zur Kontrolle der Codequalität und plötzlich können Builds, die sonst erfolgreich wären, nicht analysiert werden und schlagen fehl.
[INFO] [00: 00: 03.630] Analysieren von /mySuperProject/target/jacoco.exec -> java.io.IOException: Inkompatible Version 1007
Wenn ich Maven Build mit Debug-Schalter aufrufe, wird diese Ursache aufgedeckt
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)
Bei der Überprüfung von jacoco ExecutionDataReader habe ich festgestellt, dass eine Ausnahme von ausgelöst wird
if (version != ExecutionDataWriter.FORMAT_VERSION) {
throw new IOException(format("Incompatible version %x.",Integer.valueOf(version)));
}
und von ExecutionDataWriter habe ich herausgefunden
/** File format version, will be incremented for each incompatible change. */
public static final char FORMAT_VERSION = 0x1007;
Was ist diese inkompatible Änderung und warum passiert sie? Irgendwelche Ideen, wie man diese Herausforderung behebt?
Antworten:
Wie bereits erwähnt, ist dies auf eine Unterbrechung des JaCoCo Maven-Plugin-Codes zurückzuführen. Sie können die Version (vorübergehend) in Ihrem Befehl jenkins maven wie folgt angeben:
z.B
Dies war die Problemumgehung, die uns geholfen hat. Aber wie die meisten Leute warte ich immer noch auf die Lösung.
quelle
Ich habe die Jacoco-Version in meinem Maven-Projekt angegeben.
Das behebt mein Problem!
quelle
Dies wird höchstwahrscheinlich durch das neueste Update des Jacoco-Maven-Plugins verursacht. Alles funktionierte am 0.7.4.201502262128, aber heute haben wir auf 0.7.5.201505241946 umgestellt, was zu diesem Fehler führte.
quelle
Lauf:
Dadurch werden
.exec
Dateien neu generiert , die mit älteren Versionen von jacoco erstellt wurden.quelle
Versuchen Sie, das Java-Plugin im SonarQube Update Center zu aktualisieren. Dies funktioniert bei mir. Ich habe das Java-Plugin von Version 2.4 auf die neueste Version 3.13.1 aktualisiert.
SonarQube Update Center -> Plugin-Updates -> Java
quelle
Wie kdowbecki es erwähnte, ist dieser Fehler höchstwahrscheinlich auf ein Update des jacoco-maven-plugins zurückzuführen.
Ihr SonarQube verwendet jetzt höchstwahrscheinlich die neue Version des Jacoco Maven Plugins (wahrscheinlich die neue Version 0.7.5.201505241946), versucht jedoch tatsächlich, eine alte Version einer jacoco.exec zu lesen (in Ihrem Fall liest sie möglicherweise eine von jacoco.exec generierte jacoco maven plugin version 0.7.4.201502262128), was zu einer von JaCoCo ausgelösten Inkompatibilität führt.
Um dieses Problem zu beheben, sollten Sie sicherstellen, dass alle Ihre SonarQube / Jenkins-Jobs jedes Mal einen JaCoCo-Bericht generieren und sich nicht auf eine ältere Version von jacoco.exec verlassen, die möglicherweise von einem früheren Job generiert wurde.
quelle
Für mich das, wenn ich ein mache
mvn install
Error while creating report: Cannot read execution data version 0x1006. This version of JaCoCo uses execution data version 0x1007
bedeutete, dass ich einen Archetyp generiert hatte, aber der Archetyp enthielt versehentlich das Zielverzeichnis mit alten Jacoco-Dateien (oder es wurde bei einem Unfall in Git eingecheckt). Wenn Sie zuerst eine MVN-Bereinigung durchführen (und diese einchecken), wird das Problem behoben. Vermutlich zögert jacoco, die Datei jacoco.exec mit einer neuen zu überschreiben, wenn keine Komponententests oder ähnliches ausgeführt werden müssen. Daher wird die alte Datei beibehalten und versucht, sie für den jacoco-Bericht zu verwenden. FWIW ...
Im Allgemeinen bedeutet dies eine Versionsinkongruenz zwischen Generator und Reporter.
quelle
Ich habe pom.xml wie geändert
es hat bei mir funktioniert
quelle