Jacoco - Gradle - Can't add different class with same name

497 views Asked by At

I am trying to generate a coverage report for my integration tests using jacoco plugin and gradle but I am getting the following error.

java.lang.IllegalStateException: Can't add different class with same name: com/example/application/Application
    at org.jacoco.core.analysis.CoverageBuilder.visitCoverage(CoverageBuilder.java:106)
    at org.jacoco.core.analysis.Analyzer$1.visitEnd(Analyzer.java:99)
    at org.objectweb.asm.ClassVisitor.visitEnd(ClassVisitor.java:377)
    at org.jacoco.core.internal.flow.ClassProbesAdapter.visitEnd(ClassProbesAdapter.java:100)
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:725)
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:401)
    at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:116)
    at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:132)
Caused: java.io.IOException: Error while analyzing C:\Users\p-bri\.jenkins\jobs\ProjectAssignmentOne-ParallelBuildDeclarative\builds\5\jacoco\classes\java\main\com\example\application\Application.class.
    at org.jacoco.core.analysis.Analyzer.analyzerError(Analyzer.java:162)
    at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:134)
    at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:157)
    at org.jacoco.core.analysis.Analyzer.analyzeAll(Analyzer.java:193)
    at org.jacoco.core.analysis.Analyzer.analyzeAll(Analyzer.java:226)
    at hudson.plugins.jacoco.ExecutionFileLoader.analyzeStructure(ExecutionFileLoader.java:127)
Caused: java.io.IOException: While reading class directory: C:\Users\p-bri\.jenkins\jobs\ProjectAssignmentOne-ParallelBuildDeclarative\builds\5\jacoco\classes
    at hudson.plugins.jacoco.ExecutionFileLoader.analyzeStructure(ExecutionFileLoader.java:130)
    at hudson.plugins.jacoco.ExecutionFileLoader.loadBundleCoverage(ExecutionFileLoader.java:138)
    at hudson.plugins.jacoco.JacocoReportDir.parse(JacocoReportDir.java:110)
    at hudson.plugins.jacoco.JacocoBuildAction.loadRatios(JacocoBuildAction.java:331)
    at hudson.plugins.jacoco.JacocoBuildAction.load(JacocoBuildAction.java:321)
    at hudson.plugins.jacoco.JacocoPublisher.perform(JacocoPublisher.java:675)
    at jenkins.tasks.SimpleBuildStep.perform(SimpleBuildStep.java:123)
    at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:100)
    at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:70)
    at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)

From what I read in Jacoco FAQ this error is related to having two classes with the same name.

Is there any way to know which class is throwing this error? From reading the log it seems that it's not specified the troublesome class.

This is how my stage at my declarative pipeline ( Jenkinsfile) to generate the mentioned report

stage('Integration Test Coverage report') {
  steps {
    dir('') {
     jacoco exclusionPattern: '**/*Test*.class,**/groovy/**', classPattern: '**/classes', sourcePattern: '**/src/main/java', execPattern: '**/integrationTest.exec'
    }
  }
}

How can I solve this problem?

Also, from reading Jenkins log I also found this information

[JaCoCo plugin] Number of found exec files for pattern **/integrationTest.exec: 1
[JaCoCo plugin] Saving matched execfiles:  C:\Users\p-bri\.jenkins\workspace\ProjectAssignmentOne-ParallelBuildDeclarative\build\jacoco\integrationTest.exec
[JaCoCo plugin] Saving matched class directories for class-pattern: **/classes: 
[JaCoCo plugin]  - C:\Users\p-bri\.jenkins\workspace\ProjectAssignmentOne-ParallelBuildDeclarative\artifacts\parallel_build\reports\tests\integrationTest\classes 0 files
[JaCoCo plugin]  - C:\Users\p-bri\.jenkins\workspace\ProjectAssignmentOne-ParallelBuildDeclarative\artifacts\sequential_build\reports\tests\integrationTest\classes 0 files
[JaCoCo plugin]  - C:\Users\p-bri\.jenkins\workspace\ProjectAssignmentOne-ParallelBuildDeclarative\build\classes 24 files
[JaCoCo plugin]  - C:\Users\p-bri\.jenkins\workspace\ProjectAssignmentOne-ParallelBuildDeclarative\build\reports\tests\integrationTest\classes 0 files
[JaCoCo plugin]  - C:\Users\p-bri\.jenkins\workspace\ProjectAssignmentOne-ParallelBuildDeclarative\node_modules\semver\classes 0 files
[JaCoCo plugin]  - C:\Users\p-bri\.jenkins\workspace\ProjectAssignmentOne-ParallelBuildDeclarative\war\WEB-INF\classes 22 files
[JaCoCo plugin] Saving matched source directories for source-pattern: **/src/main/java: 
[JaCoCo plugin] Source Inclusions: **/*.java,**/*.groovy,**/*.kt,**/*.kts
[JaCoCo plugin] Source Exclusions: 
[JaCoCo plugin] - C:\Users\p-bri\.jenkins\workspace\ProjectAssignmentOne-ParallelBuildDeclarative\src\main\java 17 files
[JaCoCo plugin] Loading inclusions files..
[JaCoCo plugin] inclusions: []
[JaCoCo plugin] exclusions: [**/*Test*.class, **/groovy/**]
0

There are 0 answers