I am trying to build my project using Gradle. While running Jacoco coverage report, it gives me this error:
Caused by: java.io.IOException: Error while analyzing XXX.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.ant.ReportTask.createBundle(ReportTask.java:573)
at org.jacoco.ant.ReportTask.createReport(ReportTask.java:545)
at org.jacoco.ant.ReportTask.execute(ReportTask.java:496)
... 174 more
Caused by: java.lang.IllegalArgumentException
at org.objectweb.asm.ClassVisitor.<init>(ClassVisitor.java:70)
at org.jacoco.core.internal.flow.ClassProbesVisitor.<init>(ClassProbesVisitor.java:38)
at org.jacoco.core.internal.flow.ClassProbesVisitor.<init>(ClassProbesVisitor.java:28)
at org.jacoco.core.internal.analysis.ClassAnalyzer.<init>(ClassAnalyzer.java:59)
at org.jacoco.core.analysis.Analyzer$1.<init>(Analyzer.java:97)
I compared with some other projects that also integrated Jacoco but don't have this issue, it turns out that my project has a transitive dependency on asm. After I run ./gradlew dependency on my current project, I noticed that there is an imported ASM dependency forcing down its version from 8.0.1 -> 7.0.
jacocoAnt - The Jacoco ant tasks to use to get execute Gradle tasks.
\--- org.jacoco:org.jacoco.ant:0.8.6
+--- org.jacoco:org.jacoco.core:0.8.6
| +--- org.ow2.asm:asm:8.0.1 -> 7.0
| +--- org.ow2.asm:asm-commons:8.0.1 -> 7.0
| | +--- org.ow2.asm:asm:7.0
| | +--- org.ow2.asm:asm-tree:7.0
| | | \--- org.ow2.asm:asm:7.0
| | \--- org.ow2.asm:asm-analysis:7.0
| | \--- org.ow2.asm:asm-tree:7.0 (*)
| \--- org.ow2.asm:asm-tree:8.0.1 -> 7.0 (*)
+--- org.jacoco:org.jacoco.report:0.8.6
| \--- org.jacoco:org.jacoco.core:0.8.6 (*)
\--- org.jacoco:org.jacoco.agent:0.8.6
There is no other packages that transitively dependent on ASM, this is the only place. This is quite strange as I have no gradle resolutionStrategy that force the ASM version anywhere. Can someone tell me how I can remove the forced ASM version downgrade?
Note that I have already tried to add all of the following to my resolutionStrategy and it still resolved to version 7.0.
force 'org.ow2.asm:asm-analysis:8.0.1'
force 'org.ow2.asm:asm-tree:8.0.1'
force 'org.ow2.asm:asm-commons:8.0.1'
force 'org.ow2.asm:asm:8.0.1