JaCoCo SonarQube, несумісна версія 1007


78

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

[INFO] [00: 00: 03.630] Аналіз /mySuperProject/target/jacoco.exec -> java.io.IOException: Несумісна версія 1007

Коли я викликаю збірку maven за допомогою перемикача налагодження, ця причина виявляється

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;

Що це за несумісні зміни і чому це відбувається? Будь-які ідеї, як вирішити цю проблему?


5
Проблема порушена на стороні плагіна Java SonarQube: jira.codehaus.org/browse/SONARJAVA-1091 і має бути виправлена ​​у наступному випуску. Це надзвичайна зміна на стороні JaCoCo. Давайте трохи часу, щоб ми могли це виправити.
benzonico

Відповіді:


77

Як уже зазначалося, це пов'язано з проривом коду плагіна 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

Це допомогло нам допомогти. Але, як і більшість людей, я все ще чекаю на виправлення.


1
Хороший фокус, в середовищі з багатьма підпроектами, що було найчистішим рішенням до цього часу
Падвіндер,

1
Це виправлено в останній версії плагіна Java
SonarQube

1
Я все ще отримую цю помилку з SonarQube 5.1.1. Як застосувати найновіший плагін SonarQube Java?
davidfmatheson

3
Довелося оновлювати плагін Java у моєму екземплярі SonarQube <SONAR_URL> / updatecenter / updates
davidfmatheson

32

Що я зробив, це вказав версію 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>

Це виправило мою проблему!


17

Швидше за все, це спричинено останнім оновленням плагіна jacoco-maven. Все працювало 0.7.4.201502262128, але сьогодні ми перейшли на 0.7.5.201505241946, що призвело до цієї помилки.


Я теж це бачу. Чи маєте Ви більше інформації щодо цього?
Джаред Берроуз

6

Виконати:

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.


6

Спробуйте оновити плагін Java у Центрі оновлення SonarQube, це працює для мене. Я оновив плагін Java з версії 2.4 до останньої версії 3.13.1.

Центр оновлення SonarQube -> Оновлення плагінів -> Java


2

Як згадував 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, яка могла бути створена попереднім завданням.


0

Для мене це, коли робиш a mvn install

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

мав на увазі, що я зробив генерування архетипу, але архетип випадково включив до нього цільовий каталог зі старими файлами jacoco (або він був перевірений на git випадково). Спочатку очищення mvn (і перевірка цього) прояснило проблему. Вгадуємо, що jacoco неохоче перезаписує файл jacoco.exec новим, коли немає модульних тестів для запуску або щось подібне, тому старий файл зберігається та намагається використати для звіту jacoco. FWIW ...

Загалом це означає невідповідність версій генератора та репортера.


0

Я змінив pom.xml, як

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

це спрацювало для мене

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.