2015-05-26 31 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的