igr*_*igr 5 java java-platform-module-system jacoco java-9
JaCoCo 和MultiRelease JAR 文件存在问题。由于两个地方存在相同的类名,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 org.jacoco.core.analysis.Analyzer$1.visitEnd(Analyzer.java:96)
Run Code Online (Sandbox Code Playgroud)
我们如何告诉 JaCoCo(在 Gradle 中)跳过 META-INF 路径中的类?或者根据 JVM 版本表现得像它应该的那样(使用正确的类并忽略其他版本)?
正如 @nullpointer 所解释的,JaCoCo 不支持多版本 JAR 文件。
我的解决方法是忽略版本类。我无法通过显式设置类的名称来忽略该类,看起来 JaCoCo 正在扫描所有类,然后才应用过滤器进行排除(但也许我错了)。
因此,删除版本类的唯一方法是排除所有资源 - 因为它们无论如何都不会被使用。像这样:
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
}
}
Run Code Online (Sandbox Code Playgroud)
所以我改变了这个:
sourceSets it.sourceSets.main
Run Code Online (Sandbox Code Playgroud)
对此:
sourceDirectories = it.sourceSets.main.java
classDirectories = it.sourceSets.main.output.classesDirs
Run Code Online (Sandbox Code Playgroud)
我们明确指出的区别是:sourceSets.main.output.classesDirs不包括资源。
| 归档时间: |
|
| 查看次数: |
985 次 |
| 最近记录: |