Steps to reproduce
JaCoCo version: 0.8.3
Tool integration: Gradle 5.2.1
Multiple modules, JacocoReport Gradle task (note, there's no option to configure "exclude file").
Source directory list all the directories of project submodules. Each of them happens to have module-info.class which confuses JaCoCo
val jacocoReport by tasks.registering(JacocoReport::class) {
group = "Coverage reports"
description = "Generates an aggregate report from all subprojects"
}
allprojects {
plugins.withType<JacocoPlugin> {
val testTasks = tasks.withType<Test>()
testTasks.configureEach {
extensions.configure<JacocoTaskExtension> {
// We don't want to collect coverage for third-party classes
includes?.add("org.apache.jmeter.*")
}
}
jacocoReport {
// Note: this creates a lazy collection
// Some of the projects might fail to create a file (e.g. no tests or no coverage),
// So we check for file existence. Otherwise JacocoMerge would fail
val execFiles = files(testTasks).filter { it.exists() && it.name.endsWith(".exec") }
executionData(execFiles)
}
// Add each project to combined report
configure<SourceSetContainer> {
val mainCode = main.get()
jacocoReport.configure {
additionalSourceDirs.from(mainCode.allJava.srcDirs)
sourceDirectories.from(mainCode.allSource.srcDirs)
// IllegalStateException: Can't add different class with same name: module-info
classDirectories.from(mainCode.output) // <-- this fails
}
}
}
Expected behaviour
module-info.class should be just ignored or attributed properly
Actual behaviour
....
Caused by: java.io.IOException: Error while analyzing .../domain/build/classes/kotlin/main/module-info.class.
at org.jacoco.core.analysis.Analyzer.analyzerError(Analyzer.java:168)
at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:140)
at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:163)
at org.jacoco.core.analysis.Analyzer.analyzeAll(Analyzer.java:199)
at org.jacoco.core.analysis.Analyzer.analyzeAll(Analyzer.java:232)
at org.jacoco.core.analysis.Analyzer.analyzeAll(Analyzer.java:227)
at org.jacoco.ant.ReportTask.createBundle(ReportTask.java:567)
at org.jacoco.ant.ReportTask.createReport(ReportTask.java:542)
at org.jacoco.ant.ReportTask.execute(ReportTask.java:495)
... 107 more
Caused by: java.lang.IllegalStateException: Can't add different class with same name: module-info
at org.jacoco.core.analysis.CoverageBuilder.visitCoverage(CoverageBuilder.java:105)
at org.jacoco.core.analysis.Analyzer$1.visitEnd(Analyzer.java:98)
at org.objectweb.asm.ClassVisitor.visitEnd(ClassVisitor.java:326)
at org.jacoco.core.internal.flow.ClassProbesAdapter.visitEnd(ClassProbesAdapter.java:98)
at org.objectweb.asm.ClassReader.accept(ClassReader.java:683)
at org.objectweb.asm.ClassReader.accept(ClassReader.java:391)
at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:122)
at org.jacoco.core.analysis.Analyzer.analyzeClass(Analyzer.java:138)
... 114 more
Steps to reproduce
JaCoCo version: 0.8.3
Tool integration: Gradle 5.2.1
Multiple modules, JacocoReport Gradle task (note, there's no option to configure "exclude file").
Source directory list all the directories of project submodules. Each of them happens to have
module-info.classwhich confuses JaCoCoExpected behaviour
module-info.classshould be just ignored or attributed properlyActual behaviour