在 jacoco 报告中显示来自 jar 包的外部源
Show external sources from jar package in jacoco report
我们在 java 项目中使用带有 gradle 插件的 jacoco 来计算覆盖率。
问题是我们把从 XML 生成的 类 放在一个额外的项目中,并将其作为依赖项解决。我们也想要这些模型的代码覆盖率 类 来分析它。检查我们是否在映射器 类 中使用了数据容器的所有 setter 方法。模型项目中的代码覆盖不是一个选项。
目前 jacoco 仅在报告 (html/xml/csv) 中显示我们在主项目中的 类 而不是外部 jar 的 类。当我用 eclipse 或 intellij 加载它时,jacoco 会话包含覆盖率数据。
buildscript {
...
dependencies {
...
classpath 'externalpackage:externalpackage-model'
...
}
}
compile('externalpackage:externalpackage-model:0.0.8')
testCompile('externalpackage:externalpackage-model:tests@jar')
testCompile('externalpackage:externalpackage-model:0.0.8:sources@jar')
jacoco {
toolVersion = "0.7.6.201602180812"
reportsDir = file("$buildDir/customJacocoReportDir")
}
jacocoTestReport {
reports {
xml.enabled true
csv.enabled true
html.enabled true
html.destination "${buildDir}/jacocoHtml"
}
additionalSourceDirs files('externalpackage:externalpagage:0.0.8:sources@jar')
//Doesn't work either
//additionalSourceDirs files('C:/Users/sero/Downloads/test/externalpackage-0.0.8-sources')
//additionalSourceDirs = files('C:/Users/sero/Downloads/test/externalpackage-0.0.8-sources/de/mycompany/.../MyModelClasses.java')
}
jar源码包是这样的:
(根)/de/mycompany/.../MyModelClasses.java
也许有人有想法
自己找的。问题是,您还需要指定 类 的路径。
我将 jars 解压缩到构建文件夹中,并将 additionalClassDirs 和 additionalSourceDirs 添加到报告作业中。
这是构建文件。
configurations {
externalClasses
externalSources
}
dependencies {
externalClasses "externalpackage:externalpackage-model:0.0.8@jar"
externalSources "externalpackage:externalpackage-model:0.0.8:sources@jar"
...
}
buildscript {
...
dependencies {
...
classpath 'externalpackage:externalpackage-model'
...
}
}
compile('externalpackage:externalpackage-model:0.0.8')
testCompile('externalpackage:externalpackage-model:tests@jar')
testCompile('externalpackage:externalpackage-model:0.0.8:sources@jar')
jacoco {
toolVersion = "0.7.6.201602180812"
reportsDir = file("$buildDir/customJacocoReportDir")
}
task unzipExternalModel(type: Copy){
from zipTree(configurations.externalSources.files.first())
into "$buildDir/tmp/externalSources"
from zipTree(configurations.externalClasses.files.first())
into "$buildDir/tmp/externalClasses"
}
jacocoTestReport {
dependsOn unzipExternalModel
reports {
xml.enabled true
csv.enabled true
html.enabled true
html.destination "${buildDir}/jacocoHtml"
}
additionalSourceDirs = files("$buildDir/tmp/externalSources")
additionalClassDirs = files("$buildDir/tmp/externalClasses")
}
仅作记录,使用 7.1.1,此代码(受文森特的启发)有效:
test {
useJUnitPlatform()
finalizedBy jacocoTestReport
jacoco {
includes = ["com.mycompany.**"]
includeNoLocationClasses true
}
}
task unzipLibrariesJar(type: Copy){
into "$buildDir/tmp/libClasses"
from {
configurations.runtimeClasspath
.filter { it.path.contains("mycompany") }
.collect {zipTree(it) }
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
task unzipLibrariesSrc(type: Copy){
into "$buildDir/tmp/libSources"
from {
configurations.runtimeClasspath
.filter { it.path.contains("mycompany") && new File(it.getPath().replace(".jar", "-sources.jar")).exists() }
.collect { new File(it.getPath().replace(".jar", "-sources.jar")) }
.collect { zipTree(it) }
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
jacocoTestReport {
dependsOn test
dependsOn unzipLibrariesJar
dependsOn unzipLibrariesSrc
reports {
html.enabled true
}
additionalClassDirs.from = files("$buildDir/tmp/libClasses")
additionalSourceDirs.from = files("$buildDir/tmp/libSources")
}
请注意,我只对“com.mycompany”包的所有 类 的日志感兴趣。您应该根据您的要求进行更改。
我们在 java 项目中使用带有 gradle 插件的 jacoco 来计算覆盖率。 问题是我们把从 XML 生成的 类 放在一个额外的项目中,并将其作为依赖项解决。我们也想要这些模型的代码覆盖率 类 来分析它。检查我们是否在映射器 类 中使用了数据容器的所有 setter 方法。模型项目中的代码覆盖不是一个选项。
目前 jacoco 仅在报告 (html/xml/csv) 中显示我们在主项目中的 类 而不是外部 jar 的 类。当我用 eclipse 或 intellij 加载它时,jacoco 会话包含覆盖率数据。
buildscript {
...
dependencies {
...
classpath 'externalpackage:externalpackage-model'
...
}
}
compile('externalpackage:externalpackage-model:0.0.8')
testCompile('externalpackage:externalpackage-model:tests@jar')
testCompile('externalpackage:externalpackage-model:0.0.8:sources@jar')
jacoco {
toolVersion = "0.7.6.201602180812"
reportsDir = file("$buildDir/customJacocoReportDir")
}
jacocoTestReport {
reports {
xml.enabled true
csv.enabled true
html.enabled true
html.destination "${buildDir}/jacocoHtml"
}
additionalSourceDirs files('externalpackage:externalpagage:0.0.8:sources@jar')
//Doesn't work either
//additionalSourceDirs files('C:/Users/sero/Downloads/test/externalpackage-0.0.8-sources')
//additionalSourceDirs = files('C:/Users/sero/Downloads/test/externalpackage-0.0.8-sources/de/mycompany/.../MyModelClasses.java')
}
jar源码包是这样的: (根)/de/mycompany/.../MyModelClasses.java
也许有人有想法
自己找的。问题是,您还需要指定 类 的路径。
我将 jars 解压缩到构建文件夹中,并将 additionalClassDirs 和 additionalSourceDirs 添加到报告作业中。
这是构建文件。
configurations {
externalClasses
externalSources
}
dependencies {
externalClasses "externalpackage:externalpackage-model:0.0.8@jar"
externalSources "externalpackage:externalpackage-model:0.0.8:sources@jar"
...
}
buildscript {
...
dependencies {
...
classpath 'externalpackage:externalpackage-model'
...
}
}
compile('externalpackage:externalpackage-model:0.0.8')
testCompile('externalpackage:externalpackage-model:tests@jar')
testCompile('externalpackage:externalpackage-model:0.0.8:sources@jar')
jacoco {
toolVersion = "0.7.6.201602180812"
reportsDir = file("$buildDir/customJacocoReportDir")
}
task unzipExternalModel(type: Copy){
from zipTree(configurations.externalSources.files.first())
into "$buildDir/tmp/externalSources"
from zipTree(configurations.externalClasses.files.first())
into "$buildDir/tmp/externalClasses"
}
jacocoTestReport {
dependsOn unzipExternalModel
reports {
xml.enabled true
csv.enabled true
html.enabled true
html.destination "${buildDir}/jacocoHtml"
}
additionalSourceDirs = files("$buildDir/tmp/externalSources")
additionalClassDirs = files("$buildDir/tmp/externalClasses")
}
仅作记录,使用 7.1.1,此代码(受文森特的启发)有效:
test {
useJUnitPlatform()
finalizedBy jacocoTestReport
jacoco {
includes = ["com.mycompany.**"]
includeNoLocationClasses true
}
}
task unzipLibrariesJar(type: Copy){
into "$buildDir/tmp/libClasses"
from {
configurations.runtimeClasspath
.filter { it.path.contains("mycompany") }
.collect {zipTree(it) }
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
task unzipLibrariesSrc(type: Copy){
into "$buildDir/tmp/libSources"
from {
configurations.runtimeClasspath
.filter { it.path.contains("mycompany") && new File(it.getPath().replace(".jar", "-sources.jar")).exists() }
.collect { new File(it.getPath().replace(".jar", "-sources.jar")) }
.collect { zipTree(it) }
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
jacocoTestReport {
dependsOn test
dependsOn unzipLibrariesJar
dependsOn unzipLibrariesSrc
reports {
html.enabled true
}
additionalClassDirs.from = files("$buildDir/tmp/libClasses")
additionalSourceDirs.from = files("$buildDir/tmp/libSources")
}
请注意,我只对“com.mycompany”包的所有 类 的日志感兴趣。您应该根据您的要求进行更改。