我正在使用SonarQube进行代码质量控制,并且突然构建否则将无法分析并失败。
[INFO] [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 (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;
这种不兼容的变化是什么?为什么会发生? 任何想法如何解决这个挑战?
答案 0 :(得分:75)
如前所述,这是由于JaCoCo maven插件代码中断。 您可以(暂时)在jenkins maven命令中指定版本,如:
clean org.jacoco:jacoco-maven-plugin:<version>:prepare-agent install
e.g。
clean org.jacoco:jacoco-maven-plugin:0.7.4.201502262128:prepare-agent install
这是帮助我们的解决方法。但是和大多数人一样,我还在等待修复工作。
答案 1 :(得分: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>
这解决了我的问题!
答案 2 :(得分:16)
最有可能是由最新的jacoco-maven-plugin更新引起的。一切都在0.7.4.201502262128上工作,但今天我们切换到0.7.5.201505241946,导致了这个错误。
答案 3 :(得分: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
个文件。
答案 4 :(得分:6)
尝试更新SonarQube更新中心中的Java插件,这对我有用。我将Java插件从2.4版更新到最新的3.13.1。
SonarQube更新中心 - &gt;插件更新 - &gt;爪哇
答案 5 :(得分:2)
正如kdowbecki所提到的,这个错误很可能是由于更新了jacoco-maven-plugin。
您的SonarQube现在很可能正在使用新版本的Jacoco Maven插件(可能是新的0.7.5.201505241946),但实际上是在尝试读取旧版本的jacoco.exec(在您的情况下,它可能正在阅读jacoco。由jacoco maven插件版本0.7.4.201502262128生成的exec,导致JaCoCo抛出不兼容性。
要解决此问题,您应确保所有SonarQube / Jenkins作业每次都生成JaCoCo报告,并且不依赖于之前作业可能生成的旧版jacoco.exec。
答案 6 :(得分:0)
对我来说,mvn install
Error while creating report: Cannot read execution data version 0x1006. This version of JaCoCo uses execution data version 0x1007
meant我已经完成了原型生成,但是原型意外地在目标目录中包含了旧的jacoco文件(或者偶然地将其检入了git)。首先进行mvn清理(然后检查)可以解决问题。当没有要运行的单元测试或类似的东西时,Guess jacoco不愿意用一个新文件覆盖jacoco.exec文件,因此保留了旧文件并尝试将其用于jacoco报告。 FWIW ...
通常,它表示version mismatch的生成器与报告器。
答案 7 :(得分:0)
我像
一样更改了pom.xmlgroupId=org.jacoco
artifactId=jacoco-maven-plugin
version=0.8.4-SNAPSHOT
对我有用