JaCoCo SonarQube不兼容版本1007

问题描述 投票:77回答:8

我正在使用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;

这种不相容的变化是什么?它为什么会发生?任何想法如何解决这一挑战?

sonarqube jacoco
8个回答
76
投票

如前所述,这是由于JaCoCo maven插件代码中断。您可以(暂时)在jenkins maven命令中指定版本,例如:

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

EG

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

这是帮助我们的解决方法。但和大多数人一样,我还在等待修复工作的到来。


32
投票

我所做的是在我的maven项目中指定jacoco版本。

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

这解决了我的问题!


16
投票

最有可能是由最新的jacoco-maven-plugin更新引起的。一切都在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

这将重新生成由旧版jacoco创建的.exec文件。


6
投票

尝试更新SonarQube更新中心中的Java插件,这对我有用。我将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
投票

对我来说,当做一个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 ...

一般来说,它意味着发电机与记者的version mismatch


0
投票

我把pom.xml改成了

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

它对我有用

© www.soinside.com 2019 - 2024. All rights reserved.