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
SonarQube Java插件方面已出现问题:jira.codehaus.org/browse/SONARJAVA-1091,应在下一发行版中修复。这是JaCoCo方面的重大变化。让我们花一点时间来修复它。
benzonico

Answers:


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
这是固定在SonarQube Java插件的最新版本
thomas.mc.work

1
SonarQube 5.1.1仍然出现此错误。如何强制使用最新的SonarQube Java插件?
davidfmatheson

3
必须在我的SonarQube实例<SONAR_URL> / updatecenter / updates中更新Java插件
davidfmatheson 2015年

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>

那解决了我的问题!



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

尝试在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清理(然后检查)可以解决问题。当没有要运行的单元测试或类似的东西时,Guess jacoco不愿意用一个新文件覆盖jacoco.exec文件,因此保留了旧文件并尝试将其用于jacoco报告。FWIW ...

通常,这意味着生成器与报告器的版本不匹配


0

我将pom.xml更改为

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

它对我有用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.