JaCoCo SonarQube inkompatible Version 1007

78

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?

Padvinder
quelle
5
Das Problem wurde auf der Seite des SonarQube-Java-Plugins angesprochen : jira.codehaus.org/browse/SONARJAVA-1091 und sollte in der nächsten Version behoben werden. Dies ist eine bahnbrechende Änderung auf der JaCoCo-Seite. Lassen Sie uns etwas Zeit, um das Problem zu beheben.
Benzonico

Antworten:

76

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:

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

z.B

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

Dies war die Problemumgehung, die uns geholfen hat. Aber wie die meisten Leute warte ich immer noch auf die Lösung.

deketim
quelle
1
Netter Trick, in einer Umgebung mit vielen Teilprojekten, die bisher die sauberste Lösung war
Padvinder
1
Dies ist in der neuesten Version des SonarQube Java PlugIn behoben
thomas.mc.work
1
Ich erhalte immer noch diesen Fehler mit SonarQube 5.1.1. Wie erzwinge ich das neueste SonarQube Java Plugin?
Davidfmatheson
3
Musste das Java Plugin in meiner SonarQube-Instanz <SONAR_URL> / updatecenter / updates aktualisieren
davidfmatheson
32

Ich habe die Jacoco-Version in meinem Maven-Projekt angegeben.

<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>

Das behebt mein Problem!

Rémi Roy
quelle
16

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.

Karol Dowbecki
quelle
Ich sehe das auch. Haben Sie weitere Informationen dazu?
Jared Burrows
6

Lauf:

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

Dadurch werden .execDateien neu generiert , die mit älteren Versionen von jacoco erstellt wurden.

Babken Vardanyan
quelle
6

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

dereck
quelle
2

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.

Pom12
quelle
0

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.

Rogerdpack
quelle
0

Ich habe pom.xml wie geändert

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

es hat bei mir funktioniert

Bhanu
quelle