gpt4 book ai didi

java - JaCoCo 和 MR Jars

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:28 25 4
gpt4 key购买 nike

JaCoCo 和 MultiRelease JAR files 有问题.由于两个地方存在相同的类名,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)

我们如何告诉 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
}
}

所以我改变了这个:

sourceSets it.sourceSets.main

为此:

sourceDirectories = it.sourceSets.main.java
classDirectories = it.sourceSets.main.output.classesDirs

我们明确声明的区别在于:sourceSets.main.output.classesDirs 排除了资源。

Source

关于java - JaCoCo 和 MR Jars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47664723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com