2015-02-23 97 views
2

我一直在本地使用JaCoCo,沒有任何問題。JaCoCo報告在Jenkins中失敗:java.lang.ArrayIndexOutOfBoundsException

在遠程服務器上運行Jenkins作業時,作業生成良好並生成JaCoCo覆蓋報告(即,它出現在我的workspace/report文件夾中),但在嘗試在Jenkins上發佈報告時生成失敗。

我使用的是Jenkins 1.460和JaCoCo 5.0.0。

我與配置詹金斯:

  • 路徑exec的文件:**/**.exec
  • 路徑類:**/dist/validation/WEB-INF/classes
  • 路徑來源:**/src(我自己也嘗試**/Validation/src,並明確包括**/**.class和排除其他文件類型)

這是一個配置問題,還是一個comp適應性錯誤?

[編輯:如果它可以幫助其他人,其他論壇說JaCoCo需要ASM 5. +來管理Java 8類分析。我已經使用ASM 5.0.1]

BUILD SUCCESSFUL 
Total time: 4 minutes 57 seconds 
Archiving artifacts 
Recording test results 
[JaCoCo plugin] Collecting JaCoCo coverage data... 
[JaCoCo plugin] **/**.exec;**/dist/validation/WEB-INF/classes;**/Validation/src; locations are configured 
[JaCoCo plugin] Number of found exec files for pattern **/**.exec: 1 
[JaCoCo plugin] Saving matched execfiles: E:\Jenkins\jobs\Validation - Test Cases\workspace\Validation\jacoco.exec 
[JaCoCo plugin] Saving matched class directories for class-pattern: **/dist/validation/WEB-INF/classes: E:\Jenkins\jobs\Validation - Test Cases\workspace\Validation\dist\validation\WEB-INF\classes 
[JaCoCo plugin] Saving matched source directories for source-pattern: **/Validation/src: E:\Jenkins\jobs\Validation - Test Cases\workspace\Validation\src 
[JaCoCo plugin] Loading inclusions files.. 
[JaCoCo plugin] inclusions: [] 
[JaCoCo plugin] exclusions: [] 
ERROR: Publisher hudson.plugins.jacoco.JacocoPublisher aborted due to exception 
java.io.IOException: Error while analyzing class E:\Jenkins\jobs\Validation - Test Cases\builds\2015-02-23_15-59-44\jacoco\classes\org\gosh\validation\filters\ModifiedFileListFilter.class. 
    at org.jacoco.core.analysis.Analyzer.analyzerError(Analyzer.java:150) 
    at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:144) 
    at org.jacoco.core.analysis.Analyzer.analyzeAll(Analyzer.java:175) 
    at org.jacoco.core.analysis.Analyzer.analyzeAll(Analyzer.java:208) 
    at hudson.plugins.jacoco.ExecutionFileLoader.analyzeStructure(ExecutionFileLoader.java:126) 
    at hudson.plugins.jacoco.ExecutionFileLoader.loadBundleCoverage(ExecutionFileLoader.java:133) 
    at hudson.plugins.jacoco.JacocoReportDir.parse(JacocoReportDir.java:102) 
    at hudson.plugins.jacoco.JacocoBuildAction.loadRatios(JacocoBuildAction.java:291) 
    at hudson.plugins.jacoco.JacocoBuildAction.load(JacocoBuildAction.java:273) 
    at hudson.plugins.jacoco.JacocoPublisher.perform(JacocoPublisher.java:371) 
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19) 
    at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:705) 
    at hudson.model.AbstractBuild$AbstractRunner.performAllBuildSteps(AbstractBuild.java:680) 
    at hudson.model.AbstractBuild$AbstractRunner.performAllBuildSteps(AbstractBuild.java:658) 
    at hudson.model.Build$RunnerImpl.post2(Build.java:162) 
    at hudson.model.AbstractBuild$AbstractRunner.post(AbstractBuild.java:627) 
    at hudson.model.Run.run(Run.java:1446) 
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46) 
    at hudson.model.ResourceController.execute(ResourceController.java:88) 
    at hudson.model.Executor.run(Executor.java:238) 
Caused by: java.lang.ArrayIndexOutOfBoundsException: 7 
    at org.jacoco.core.internal.analysis.MethodAnalyzer.addProbe(MethodAnalyzer.java:288) 
    at org.jacoco.core.internal.analysis.MethodAnalyzer.visitInsnWithProbe(MethodAnalyzer.java:224) 
    at org.jacoco.core.internal.flow.MethodProbesAdapter.visitInsn(MethodProbesAdapter.java:76) 
    at org.objectweb.asm.tree.InsnNode.accept(InsnNode.java:80) 
    at org.objectweb.asm.tree.InsnList.accept(InsnList.java:162) 
    at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:815) 
    at org.jacoco.core.internal.flow.ClassProbesAdapter$1.visitEnd(ClassProbesAdapter.java:124) 
    at org.objectweb.asm.ClassReader.b(Unknown Source) 
    at org.objectweb.asm.ClassReader.accept(Unknown Source) 
    at org.objectweb.asm.ClassReader.accept(Unknown Source) 
    at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:107) 
    at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:142) 
    ... 18 more 
Finished: FAILURE 

[更新 - 解]

使用this answer我安裝的是最近發佈的JaCoCo-0.7.4(見eclemma.org/jacoco)我的本地驅動器上。該版本包含issue 27088的修復程序。我也必須刪除並重新安裝Jenkins JaCoCo插件(我使用了Jenkins插件管理器)。

回答

3

在構建過程中使用的JaCoCo版本和使用的版本之間似乎存在兼容性問題由詹金斯在後期製作行動。

maven-jacoco-plugin版本0.7.3.201502191951與Jenkins JaCoCo插件版本1.0.18結合導致此問題。 maven-jacoco-plugin的版本0.7.2.201409121644似乎是兼容的。

https://issues.jenkins-ci.org/browse/JENKINS-27088https://github.com/jenkinsci/jacoco-plugin/pull/51

+0

謝謝 - 請您進一步解釋我如何解決這種不兼容問題?我曾嘗試手動安裝JaCoCo,並通過Jenkins的插件管理器進行安裝。自動安裝程序給了我JaCoCo'1.0.18'和所有其他模塊('org.jacoco.agent','jacoco-maven-plugin','org.jacoco.report'和'org.jacoco.core')版本'0.7.1.201405082137' - 實際上是一個名爲'$ {jacoco.version}'的屬性。我如何管理這些依賴關係? – 2015-02-24 13:06:52

+0

...如果確實版本'0.7.1.201405082137'也是不兼容的... – 2015-02-24 13:07:23

+0

更新 - 我創建了一個框架作業,確認我的JaCoCo和Jenkins版本是兼容的,所以這不是問題。 – 2015-02-24 14:33:46

0

兩件事: 在JaCoCo後製作操作的Jenkins項目配置中,確保設置包含字段。像*/*。類應該工作。從上面的表達式中刪除第二個星號(*)。使他們*/*。執行,*/dist /等

我今天有一個類似的ArrayIndexOutOfBounds異常今天從Jacoco插件,它只發生在詹金斯,但不是當從命令行運行一個maven構建。谷歌搜索表明,Jacoco插件包含和排除領域的語法會導致人們的問題。我嘗試了幾種不同的格式對這些領域無濟於事,所以我轉移到cobertura插件,這是一個簡單的使用:https://wiki.jenkins-ci.org/display/JENKINS/Cobertura+Plugin#CoberturaPlugin-ConfiguringtheCoberturaPlugin

+0

看到,如果你認爲_The Jacoco插件sucks_,也許你能解釋一下爲什麼嗎?請注意,我對此沒有任何意見,我只是認爲這樣的論點應該附帶解釋。 – Magnilex 2015-02-24 08:11:38

+0

我曾嘗試讓Cobertura在上個月工作,最後我總結說Cobertura仍然與Java 7+不兼容。出於這個原因我正轉向JaCoCo。我無法在網上找到任何建議Cobertura已更新的內容,因此不幸的是,該選項對我無效。 – 2015-02-24 09:39:47

+0

感謝您提供關於顯式包含的建議。我應該說我已經嘗試了包括'**/**。class'並且排除(例如)**/**。xsd'。 '**'可以和其他配置設置一起工作,所以我不認爲這是造成問題的原因。 – 2015-02-24 09:44:49