JaCoCo SonarQube不兼容版本1007



我正在使用SonarQube进行代码质量控制,突然之间,原本可以通过的构建无法分析并失败。

[00:00:03.630] analysis/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;

这个不兼容的更改是什么?为什么会发生?有什么办法解决这个问题吗?

如前所述,这是由于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

这是帮助我们的变通方法。但和大多数人一样,我仍在等待解决方案的到来。

我所做的就是在我的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>

解决我的问题!

很可能是由于jacoco-maven-plugin的最新更新造成的。一切工作在0.7.4.201502262128,但今天我们切换到0.7.5.201505241946,导致这个错误。

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

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

尝试在SonarQube更新中心更新Java插件,这对我来说是有效的。我将Java插件从2.4版本更新到最新的3.13.1。

SonarQube Update Center -> Plugin Updates -> Java

正如kdowbecki所提到的,这个错误很可能是由于jacoco-maven-plugin的更新。

你的SonarQube现在很可能正在使用新版本的Jacoco Maven Plugin(可能是新的0.7.5.201505241946),但实际上正在尝试读取Jacoco的旧版本。执行(在您的情况下,它可能正在读取jacoco。

由jacoco maven插件版本0.7.4.201502262128生成,导致jacoco抛出不兼容。

要解决这个问题,你应该确保你所有的SonarQube/Jenkins作业每次都生成一个JaCoCo报告,并且不依赖于旧版本的JaCoCo。

对于我来说,当做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报告。就其价值而言…

通常表示生成器与报告程序的版本不匹配。

我把pom.xml改成了

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

最新更新