Java 在jacoco报告中显示来自jar包的外部源
我们在java项目中使用jacoco和gradle插件来计算覆盖率。 问题是我们将从XML生成的类放在一个额外的项目中,并将其作为依赖项解决。我们还需要这些模型类的codecoverage来分析它。检查是否在映射器类中使用了数据容器的所有setter方法。不要选择模型项目中的代码覆盖率 目前,jacoco只在报告(html/xml/csv)中显示主项目中的类,而不显示外部jar的类。当我用eclipse或intellij加载jacoco会话时,它包含覆盖率数据Java 在jacoco报告中显示来自jar包的外部源,java,gradle,jacoco,Java,Gradle,Jacoco,我们在java项目中使用jacoco和gradle插件来计算覆盖率。 问题是我们将从XML生成的类放在一个额外的项目中,并将其作为依赖项解决。我们还需要这些模型类的codecoverage来分析它。检查是否在映射器类中使用了数据容器的所有setter方法。不要选择模型项目中的代码覆盖率 目前,jacoco只在报告(html/xml/csv)中显示主项目中的类,而不显示外部jar的类。当我用eclipse或intellij加载jacoco会话时,它包含覆盖率数据 buildscript { ...
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源程序包如下所示:
(root)/de/mycompany/../MyModelClasses.java
也许有人有个主意是我自己发现的。问题是,您还需要指定类的路径 我将jar解压缩到build文件夹中,并将AdditionalClassDir和AdditionalSourceDir添加到报表作业中 这是构建文件
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")
}
我自己找到的。问题是,您还需要指定类的路径 我将jar解压缩到build文件夹中,并将AdditionalClassDir和AdditionalSourceDir添加到报表作业中 这是构建文件
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")
}
您正在谈论将“我们的类是从XML生成的”放入jacoco报告中。通常,您希望将生成的类从所有类型的代码分析中排除,因为如果生成了类,即使覆盖率很低,也无法更改任何内容。而且:生成的类通常只是数据容器,不提供任何逻辑-测试(和计算来自)getter/setter的覆盖率没有多大用处。没错,数据类不需要测试。但是这个问题的要求有点不同。我们需要验证我们的所有测试都使用这些数据容器的setter方法。有了这些,我们希望验证我们没有忘记在映射器类中设置任何字段。通常,您希望将生成的类从所有类型的代码分析中排除,因为如果生成了类,即使覆盖率很低,也无法更改任何内容。而且:生成的类通常只是数据容器,不提供任何逻辑-测试(和计算来自)getter/setter的覆盖率没有多大用处。没错,数据类不需要测试。但是这个问题的要求有点不同。我们需要验证我们的所有测试都使用这些数据容器的setter方法。有了这些,我们希望验证我们没有忘记在映射器类中设置任何字段。注意,为了获得源输出,我必须将复制任务一分为二(不支持将
设置为两次)。注意,为了获得源输出,我必须将复制任务一分为二(不支持将设置为两次)