JaCoCo SonarQube不兼容版本1007

JaCoCo SonarQube不兼容版本1007,sonarqube,jacoco,Sonarqube,Jacoco,我正在使用SonarQube进行代码质量控制,突然间,原本可以通过的构建无法分析并失败 [信息][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.Exe

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

[信息][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(版本!=ExecutionDataWriter.FORMAT\u版本){
抛出新的IOException(格式(“不兼容的版本%x.”,Integer.valueOf(版本));
}
从ExecutionDataWriter我发现

/**文件格式版本将针对每个不兼容的更改递增*/
公共静态最终字符格式\u版本=0x1007;
这种不兼容的变化是什么?为什么会发生?
有没有办法解决这个问题?

很可能是由最新的jacoco maven插件更新引起的。一切都在0.7.4.20150262128上运行,但今天我们切换到了0.7.5.201505241946,这导致了这个错误。

正如kdowbecki提到的,这个错误很可能是由于jacoco maven插件的更新

您的SonarQube现在很可能正在使用新版本的Jacoo Maven插件(可能是新的0.7.5.201505241946),但实际上正在尝试读取旧版本的jacoo.exec(在您的情况下,它可能正在读取由Jacoo Maven插件版本0.7.4.20150262128生成的jacoo.exec),这会导致Jacoco抛出不兼容


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

我所做的是在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>
0.7.4.20150262128
org.jacoco
jacocomaven插件
${jacoco maven plugin.version}

这解决了我的问题

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

clean org.jacoco:jacoco-maven-plugin:<version>:prepare-agent install
这是帮助我们的解决办法。但和大多数人一样,我仍在等待修复。

运行:

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更新中心->插件更新->Java

对于我来说,在执行
mvn安装时

创建报告时出错:无法读取执行数据版本0x1006。此版本的JaCoCo使用执行数据版本0x1007

这意味着我已经生成了一个原型,但该原型意外地包含了目标目录,其中包含了旧的jacoco文件(或者它在意外情况下被签入了git)。首先进行mvn清理(并将其签入)解决了问题。我猜jacoco不愿意在没有要运行的单元测试或类似测试的情况下用新文件覆盖jacoco.exec文件,因此旧文件会被保留并尝试用于jacoco报告。FWIW


一般来说,它意味着生成器与报告器的对比。

我对pom.xml做了如下更改

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

它对我有效

问题已经在SonarQube java插件端提出:应该在下一版本中解决。这对杰科科来说是一个突破性的改变。让我们花一点时间来修复它。这是一个很好的技巧,在有许多子项目的环境中,这是最干净的解决方案,所以最新版本的SonarQube Java PlugInI修复了这个问题。我仍然在SonarQube 5.1.1中遇到这个错误。如何强制最新的SonarQube Java插件?必须在我的SonarQube实例/updatecenter/updates中更新Java插件我也看到了这一点。你有关于这方面的更多信息吗?
groupId=org.jacoco
artifactId=jacoco-maven-plugin
version=0.8.4-SNAPSHOT