私はSonarQubeをコード品質管理に使用していますが、そうでなければ突然ビルドされてしまい、解析できずに失敗します。
[INFO] [00:00:03.630] /mySuperProject/target/jacoco.exec-> Java.io.IOException:Incompatible version 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;
これは何ですか互換性のない変更そしてそれはなぜ起こるのですか?この課題を解決する方法はありますか?
既に述べたように、これは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
これは私たちを助けた回避策でした。しかし、ほとんどの人と同じように、私はまだ修正が来るのを待っています。
私がやったのは、私の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>
これで問題が解決しました!
最も可能性が高いのは、最新のjacoco-maven-pluginアップデートが原因です。すべてが0.7.4.201502262128で機能していましたが、今日は0.7.5.201505241946に切り替えたため、このエラーが発生しました。
SonarQube Update CenterでJavaプラグインを更新してみてください。これでうまくいきます。 Javaプラグインをバージョン2.4から最新の3.13.1に更新しました。
SonarQube Update Center->プラグインの更新-> Java
実行:
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
ファイルが再生成されます。
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に依存しないことを確認する必要があります。
私にとってこれは、mvn install
Error while creating report: Cannot read execution data version 0x1006. This version of JaCoCo uses execution data version 0x1007
つまり、アーキタイプを生成したが、アーキタイプに誤って古いjacocoファイルを含むターゲットディレクトリが含まれていたことを意味します(または、偶然にgitにチェックインされていました)。最初にmvn cleanを実行(およびチェックイン)すると、問題は解決しました。 jacocoは、実行する単体テストなどが存在しない場合、jacoco.execファイルを新しいファイルで上書きすることをためらうため、古いファイルは保持され、jacocoレポートに使用されます。 FWIW ...
一般に、ジェネレーターとレポーターの バージョンの不一致 を意味します。
私はpom.xmlを次のように変更しました
groupId=org.jacoco
artifactId=jacoco-maven-plugin
version=0.8.4-SNAPSHOT
それは私のために働いた