Java JaCoCo和Jars先生
JaCoCo和客户之间存在问题。由于两个地方存在相同的类名,JaCoCo抱怨:Java JaCoCo和Jars先生,java,jacoco,java-9,java-platform-module-system,Java,Jacoco,Java 9,Java Platform Module System,JaCoCo和客户之间存在问题。由于两个地方存在相同的类名,JaCoCo抱怨: Caused by: java.lang.IllegalStateException: Can't add different class with same name: jodd/core/JavaBridge at org.jacoco.core.analysis.CoverageBuilder.visitCoverage(CoverageBuilder.java:107) at
Caused by: java.lang.IllegalStateException: Can't add different class with same name: jodd/core/JavaBridge
at org.jacoco.core.analysis.CoverageBuilder.visitCoverage(CoverageBuilder.java:107)
at org.jacoco.core.analysis.Analyzer$1.visitEnd(Analyzer.java:96)
我们如何告诉JaCoCo(在Gradle中)跳过META-INF路径中的类?或者,根据JVM版本的不同,按照它应该的方式运行(使用正确的类并忽略其他版本)?JaCoCo尚未提供对Java 9文件的支持
这似乎在他们的计划中,但正如@nullpointer所解释的,JaCoCo不支持多版本JAR文件 我的解决方法是忽略版本类。我不能通过显式设置类的名称来忽略它,看起来JaCoCo正在扫描所有的类,然后才应用过滤器进行排除(但可能我错了) 因此,删除versions类的唯一方法是排除所有资源,因为它们无论如何都不会被使用。像这样:
task codeCoverage(type: JacocoReport) {
executionData fileTree("${buildDir}/jacoco/").include("*.exec")
//sourceSets it.sourceSets.main <--- REPLACED WITH FOLLOWING LINES!!!
sourceDirectories = it.sourceSets.main.java
classDirectories = it.sourceSets.main.output.classesDirs
reports {
xml.enabled true
html.enabled true
}
}
为此:
sourceDirectories = it.sourceSets.main.java
classDirectories = it.sourceSets.main.output.classesDirs
这里的区别是我们明确声明:sourceset.main.output.classesDirs
,它排除了资源
@igr跳过(排除
)META-INF/*.class目录怎么样?试试看:)事情是,听起来很简单,但相当复杂(或者我看不到)。在实际报告之前,分析引擎首先获取所有文件,因此存在问题。到目前为止,我正在尝试删除所有资源
文件夹,因为报告不需要这些资源。
sourceDirectories = it.sourceSets.main.java
classDirectories = it.sourceSets.main.output.classesDirs