JaCoCo SonarQube несовместимая версия 1007

Я использую SonarQube для контроля качества кода, и вдруг сборки, которые в противном случае прошли бы, не могут быть проанализированы и не сработают.

[INFO] [00: 00: 03.630] Анализ /mySuperProject/target/jacoco.exec → java.io.IOException: Несовместимая версия 1007

Когда я вызываю maven build с помощью отладочного переключателя, эта причина обнаруживается

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)

При проверке jacoco ExecutionDataReader я обнаружил, что исключение выбрано из

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

и из ExecutionDataWriter я обнаружил

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

Что это за несовместимое изменение и почему это происходит? Любые идеи, как решить эту проблему?

Ответ 1

Как уже упоминалось, это связано с нарушением кода плагина JaCoCo maven. Вы можете (временно) указать версию в команде jenkins maven, например:

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

например.

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

Это было обходное решение, которое помогло нам. Но, как и большинство людей, я все еще жду, когда исправление придет.

Ответ 2

Что я сделал, так это указать версию jacoco в моем проекте 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>

Это исправление моей проблемы!

Ответ 3

Скорее всего, это связано с последним обновлением jacoco-maven-plugin. Все работало на 0.7.4.201502262128, но сегодня мы переключились на 0.7.5.201505241946, что привело к этой ошибке.

Ответ 4

Run:

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

Это приведет к восстановлению файлов .exec, созданных более старыми версиями jacoco.

Ответ 5

Попробуйте обновить плагин Java в Центре обновления SonarQube, это работает для меня. Я обновил плагин Java с версии 2.4 до последней версии 3.13.1.

Центр обновления SonarQube → Обновления плагинов → Java

Ответ 6

Как упоминает kdowbecki, эта ошибка, скорее всего, связана с обновлением jacoco-maven-plugin.

Теперь ваш SonarQube использует новую версию плагина Jacoco Maven (возможно, новый 0.7.5.201505241946), но на самом деле пытается прочитать старую версию jacoco.exec(в вашем случае это может быть чтение jacoco. exec, созданный плагином jacoco maven версии 0.7.4.201502262128), что приводит к несовместимости, созданной JaCoCo.

Чтобы устранить эту проблему, вы должны убедиться, что все ваши задания SonarQube/Jenkins генерируют отчет JaCoCo каждый раз и не полагаются на более раннюю версию jacoco.exec, которая могла быть сгенерирована предыдущим заданием.

Ответ 7

Для меня это, когда делаете mvn install

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

означало, что я выполнил генерацию архетипа, но архетип случайно включил целевой каталог со старыми файлами jacoco в нем (или он был случайно введен в git). Выполнение mvn clean в первую очередь (и проверка) помогло решить проблему. Полагаю, jacoco не хочет перезаписывать файл jacoco.exec новым, когда нет никаких модульных тестов или что-то в этом роде, поэтому старый файл сохраняется и пытается использоваться для отчета jacoco. FWIW...

В целом это означает, что версия генератора и репортера не совпадает.