Java 8和Gradle 4.6在这里。我正在尝试将我的Gradle构建配置为使用Jacoco Plugin,但遇到了一些困难。我已经将其与Checkstyle和Findbugs配合使用,因此运行./gradlew clean build
会调用Checkstyle和Findbugs任务,因为它们是check
任务的依赖项。
我现在正在尝试让Jacoco如此工作:
com.me.myapp.domain.model
软件包及其所有内容;和build/
目录下生成HTML版本的Jacoco报告;和./gradlew clean build
的相同Gradle命令调用来让Jacoco像这样到目前为止我最大的尝试:
plugins {
id 'java-library'
id 'checkstyle'
id 'findbugs'
id 'jacoco'
}
dependencies {
compile(
'org.hibernate:hibernate-core:5.0.12.Final'
,'com.fasterxml.jackson.core:jackson-core:2.8.10'
,'com.fasterxml.jackson.core:jackson-databind:2.8.10'
,'com.fasterxml.jackson.core:jackson-annotations:2.8.0'
)
testCompile(
'junit:junit:4.12'
)
}
repositories {
jcenter()
mavenCentral()
}
checkstyle {
config = rootProject.resources.text.fromFile('buildConfig/checkstyle/checkstyle.xml')
toolVersion = '8.11'
}
tasks.withType(FindBugs) {
reports {
xml.enabled false
html.enabled true
}
}
findbugs {
excludeFilter = file('buildConfig/findbugs/findbugs-exclude.xml')
}
jacocoTestReport {
reports {
xml.enabled false
csv.enabled false
html.enabled true
}
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it,
exclude: [
'com/me/myapp/domain/model/**'
]
)
})
}
}
jacocoTestCoverageVerification {
violationRules {
rule {
limit {
minimum = 0.7
}
failOnViolation true
}
}
}
jacoco {
toolVersion = "0.8.1"
}
// to run coverage verification during the build (and fail when appropriate)
check.dependsOn jacocoTestCoverageVerification
当我在上面的以下./gradlew clean build
(^^^)上运行build.gradle
时,如果我的覆盖率小于70%,Jacoco 会失败。 但是,它不会为我生成任何HTML报告,这对于修复它完全没有帮助。
有什么想法吗?
答案 0 :(得分:3)
请注意,Gradle Jacoco插件确实提供了两个完全不相关的功能:
JacocoReport
)JacocoCoverageVerification
)如果将插件与Java插件一起应用,则会创建上述每种类型的任务,即jacocoTestReport
和jacocoTestCoverageVerification
。如您所见,这两个名称均与test
任务相关联。
但是,所有这些任务都不会自动包含在常规Gradle build
生命周期中。不包括报告任务的原因仅仅是因为它不需要实际构建实际的软件。出于相同的原因,javadoc
生命周期中不包括build
任务(可能是在创建Javadoc jar时)。不包括验证任务的原因比较棘手,但让我们简单地引用一下文档:
JacocoCoverageVerification
任务不是Java插件提供的check
任务的任务依赖项。有充分的理由。该任务当前未递增,因为它没有声明任何输出。执行检查任务时,任何违反声明规则的行为都会自动导致构建失败。对于所有用户,此行为可能并不理想。将来的Gradle版本可能会改变行为。
您已经通过向构建文件添加check.dependsOn jacocoTestCoverageVerification
解决了此问题。这样,每次构建都会检查代码覆盖率(如果不够,将失败)。现在,您希望在所有版本中生成报告,即使由于代码覆盖范围不足而导致报告失败。您需要确保在生成之前生成报告,否则构建可能会失败。您可以使用:
jacocoTestCoverageVerification.dependsOn jacocoTestReport
答案 1 :(得分:2)
从文档https://docs.gradle.org/current/userguide/jacoco_plugin.html
默认情况下,HTML报告处于启用状态。因此,无需在配置中放入html.enabled
。此外,文档显示了如何指定目标文件夹。您可以尝试将其设置为某个已知的文件夹,以检查它是否可以正常工作,例如html.destination file("${buildDir}/jacocoHtml")
。 HTML报告结尾的默认报告目录为$buildDir/reports/jacoco/test
将Jacoco报告目录设置为某个显式值也可以帮助识别任何配置问题reportsDir
。