From
https://www.jacoco.org/jacoco/trunk/doc/faq.html
Why do I get the error "Can't add different class with same name"?
For coverage report generation all classes within a group must have unique names. You get this error during report generation if JaCoCo is supplied with multiple different class files with the same name. To fix this remove those duplicate classes or create separate reports or report groups for each version.
Now to my question.
We would like to generate code coverage reports upon regular execution in a controlled environment, rather than only via junit.
For this the options used are
java -javaagent:"/path/to/org.jacoco.agent-0.8.7-runtime.jar -cp "${CLASS_PATH}" "${_class}"
after bringing down the java process, we run
java -jar /path/to/org.jacoco.cli-0.8.7-nodeps.jar report ./depbase/tmp/jacoco.exec --html ./report --sourcefiles /path/to/sourcefiles --classfiles /path/to/classfiles
Leading to the output
[INFO] Loading execution data file /path/to/jacoco.exec.
Exception in thread "main" java.io.IOException: Error while analyzing path/to/classfiles/log4j-core-2.17.1.jar@org/apache/logging/log4j/core/util/SystemClock.class.
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzerError(Analyzer.java:162)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeClass(Analyzer.java:134)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeClass(Analyzer.java:157)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeAll(Analyzer.java:193)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeZip(Analyzer.java:265)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeAll(Analyzer.java:196)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeAll(Analyzer.java:226)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeAll(Analyzer.java:221)
at org.jacoco.cli.internal.commands.Report.analyze(Report.java:110)
at org.jacoco.cli.internal.commands.Report.execute(Report.java:84)
at org.jacoco.cli.internal.Main.execute(Main.java:90)
at org.jacoco.cli.internal.Main.main(Main.java:105)
Caused by: java.lang.IllegalStateException: Can't add different class with same name: org/apache/logging/log4j/core/util/SystemClock
at org.jacoco.cli.internal.core.analysis.CoverageBuilder.visitCoverage(CoverageBuilder.java:106)
at org.jacoco.cli.internal.core.analysis.Analyzer$1.visitEnd(Analyzer.java:99)
at org.jacoco.cli.internal.asm.ClassVisitor.visitEnd(ClassVisitor.java:377)
at org.jacoco.cli.internal.core.internal.flow.ClassProbesAdapter.visitEnd(ClassProbesAdapter.java:100)
at org.jacoco.cli.internal.asm.ClassReader.accept(ClassReader.java:725)
at org.jacoco.cli.internal.asm.ClassReader.accept(ClassReader.java:401)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeClass(Analyzer.java:116)
at org.jacoco.cli.internal.core.analysis.Analyzer.analyzeClass(Analyzer.java:132)
... 10 more
The class SystemClock exists in two third party libraries, both with the package name starting with org.apache.
So, tried the same again with
=excludes=org/apache/*
But that doesn't make the error go away.
So, coming back to the recommendation in the faq, which was
"To fix this remove those duplicate classes or create separate reports or report groups for each version."
since there is no interest in generating code coverage or even instrumenting for the apache libraries, what's the option to use withing javaagent, other than
java -javaagent:"/path/to/org.jacoco.agent-0.8.7-runtime.jar=includes=mypackage|mypkg=excludes=^(?!.*(mypackage|mypkg)).*$:org/apache/*"
(Include my packages, exclude anything that's not my package, exclude anything that's org/apache/*)
?
Thanks in advance.