hot*_*oup 1 java gradle jacoco
Java 8和Gradle 4.6在这里。我正在尝试将我的Gradle构建配置为使用Jacoco插件,但遇到了一些困难。我已经将其与Checkstyle和Findbugs配合使用,因此运行会./gradlew clean build调用Checkstyle和Findbugs任务,因为它们是check任务的依赖项。
我现在正在尝试让Jacoco进行以下工作:
com.me.myapp.domain.model包裹及其所有内容;和build/目录下生成HTML版本的Jacoco报告;和./gradlew clean build来使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
Run Code Online (Sandbox Code Playgroud)
当我./gradlew clean build使用build.gradle上面的以下内容(^^^)运行时,如果我的覆盖率小于70%,Jacoco 的确会失败。但是,它不会为我生成任何HTML报告,这在修复它方面根本没有帮助。
有任何想法吗?
请注意,Gradle Jacoco插件确实提供了两个完全不相关的功能:
JacocoReport)JacocoCoverageVerification)如果将插件与Java插件一起应用,则会创建上述每种类型的任务,即jacocoTestReport和jacocoTestCoverageVerification。如您所见,这两个名称都与test任务相关联。
但是,这些任务都不会自动包含在常规Gradle build生命周期中。不包括报告任务的原因仅仅是因为它不需要实际构建实际的软件。出于同样的原因,该javadoc任务未包含在build生命周期中(可能是在创建javadoc jar时)。不包括验证任务的原因比较棘手,但让我们简单地引用以下文档:
该
JacocoCoverageVerification任务不是checkJava插件提供的任务的任务依赖性。有充分的理由。该任务当前未递增,因为它没有声明任何输出。执行检查任务时,任何违反声明规则的行为都会自动导致构建失败。对于所有用户,此行为可能并不理想。Gradle的未来版本可能会改变行为。
您已经通过添加check.dependsOn jacocoTestCoverageVerification到构建文件中解决了此问题。这样,每次构建都会检查代码覆盖率(如果不够,将失败)。现在,您希望在所有版本中生成报告,即使由于代码覆盖范围不足而导致报告失败。您需要确保在生成可能失败之前生成报告。您可以使用:
jacocoTestCoverageVerification.dependsOn jacocoTestReport
Run Code Online (Sandbox Code Playgroud)