Java 不排除包装的jacoco测试报告

Java 不排除包装的jacoco测试报告,java,unit-testing,testing,gradle,jacoco,Java,Unit Testing,Testing,Gradle,Jacoco,我试图从jacoco的保险范围中排除一整套,但它不起作用。 我已经按照回答中的说明进行了操作,但似乎对我不起作用。 代码如下: jacocoTestReport { reports { xml.enabled false csv.enabled false html.destination "${buildDir}/jacocoHtml" } afterEvaluate { classDirectories = files(classDirectori

我试图从jacoco的保险范围中排除一整套,但它不起作用。
我已经按照回答中的说明进行了操作,但似乎对我不起作用。 代码如下:

jacocoTestReport {
  reports {
    xml.enabled false
    csv.enabled false
    html.destination "${buildDir}/jacocoHtml"
  }
  afterEvaluate {
    classDirectories = files(classDirectories.files.collect {
        fileTree(dir: it,
                exclude: ['it.unibo.distributedBLS.main/**'])
    })
  }
}
我也尝试过一些变化,比如排除+=,写作

'**/it.unibo.distributedBLS.main/**'
并加入

test {
  jacoco {
    excludes += ['it.unibo.distributedBLS.main/**',     
  }
}
但仍然不起作用。

有一件事我不清楚,“dir:it”代表什么:我应该在那里放什么?这可能是错误吗

以下是对我有效的方法(至少对html有效,对xml报告无效)。我在做一些小调整并重新运行我的构建时偶然发现了它。现在有点道理,但不是很直观

注意我如何在
test.jacoco
vs中定义我的包,而不是将它们从
jacotestreport.afterEvaluate中的实际报告中排除

test {
    finalizedBy jacocoTestReport
    jacoco {
        excludes += ["**/com.mypackage.things/**","**/com.mypackage.entity/**"]
    }
}

jacocoTestReport {
    reports {
        xml.enabled true
        csv.enabled false
        html.enabled false
        xml.destination "${buildDir}/reports/jacoco"
    }

    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(dir: it,
                exclude: ['**/com/mypackage/things/**',
                          '**/com/mypackage/entity/**'])
        })
    }
}
我为Sonarqube生成了XML,但在重新运行以查看包是否被删除时,我临时将其切换为HTML。在某个时刻,我注意到
com.mypackage.entity
被排除在外,但
com.mypackage.things
没有。这时我意识到我在报告中用
/
'定义了实体包,但在things包中使用了


对于测试部分,使用点表示法更有意义,因为报告可能是在某种html目录结构中生成的,所以使用斜杠表示法更有意义。还不知道如何为XML修复它。如果您遇到以下错误,我猜是某种其他的符号??

Cannot set the value of read-only property 'classDirectories' for task ':jacocoTestReport' of type org.gradle.testing.jacoco.tasks.JacocoReport.
用这个

classDirectories.setFrom(
            fileTree(dir: "build/classes/java/main")
                    .filter({file -> !file.path.contains('/dir1')})
                    .filter({file -> !file.path.contains('/dir2')})
                    .filter({file -> !file.path.contains('/dir3')})
    )

不,
dir:it
很好。这意味着每个集合目录都将作为第一个参数传递给fileTree。是否获得未排除包的结果?还是他们都是0%?您链接到的答案建议
afterEvaluate{classDirectories=files(classDirectories.files.collect{fileTree(dir:it,exclude:['**/it.unibo.distributedBLS.main/**'])}
应该用于从html中删除结果,而
jacoco{excludes+=['**/it.unibo.distributedBLS.main/**']}
应该会阻止测试运行。您需要这两种方法,并且您需要模式
**/it.unibo.distributedBLS.main/**
跟进:看起来XML中排除了包。所以我想Sonar需要知道在哪里可以找到这些信息。我想这两种方法都适用!