2015-05-26 32 views
74

我使用SonarQube进行代码质量控制,并突然构建,否则会通过无法分析和失败。JaCoCo SonarQube不兼容版本1007

[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,我发现异常是从

抛出0

和ExecutionDataWriter我发现了

/** File format version, will be incremented for each incompatible change. */ 
public static final char FORMAT_VERSION = 0x1007; 

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

+5

问题已经被提出对SonarQube Java插件的一面:http://jira.codehaus.org/browse/SONARJAVA-1091,并将其固定在下一版本中。这是JaCoCo方面的一次突破性变革。让我们花一点时间来解决它。 – benzonico

回答

73

如前所述,这是由于JaCoCo maven插件代码中断。

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

例如: 你可以(暂时)在詹金斯的maven命令像指定版​​本

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

这是帮助我们的解决方法。但是像大多数人一样,我仍然在等待修复。

+1

很好的把戏,在许多子项目的环境中,迄今为止最干净的解决方案 – Padvinder

+0

已关闭JaCoCo问题:http://jira.sonarsource.com/browse/SONARJAVA-1091 –

+1

这是在最新版本的SonarQube Java插件中修复的问题 –

16

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

+0

我也看到了这一点。你有关于此的更多信息吗? –

1

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

您的SonarQube很可能现在使用新版本的Jacoco Maven Plugin(可能是新的0.7.5.201505241946),但实际上是试图读取旧版本的jacoco.exec(在您的情况下它可能正在阅读jacoco由jacoco maven插件生成的.exec版本0.7.4.201502262128)导致JaCoCo引发不兼容。

要解决此问题,您应确保所有SonarQube/Jenkins作业每次生成JaCoCo报告,并且不要依赖先前作业可能生成的旧版jacoco.exec。

29

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

是的,工作。谢谢。 – djangofan

5

运行:

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

尝试更新SonarQube更新中心中的Java插件,这对我很有用。我将Java插件从版本2.4更新到最新的3.13.1。

SonarQube更新中心 - >插件更新 - > Java的