我有一个maven多模块项目,我正在使用jacoco-maven进行代码覆盖率报告.不应该报告某些类,因为它们是Spring配置,我对它们不感兴趣.
我已经宣布了maven-jacoco插件如下:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.2.201409121644</version>
<configuration>
<outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
<exclude>some.package.*</exclude>
<exclude>**/*Config.*</exclude>
<exclude>**/*Dev.*</exclude>
<exclude>some/package/SomeClass.java</exclude>
</configuration>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>post-unit-test</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
问题是,当我执行mvn clean verifyjacoco时,仍会报告应该已被排除的类,因为我的xml配置指出了.如何正确配置?
我刚刚使用新版本的 Gradle 将我的 Android Studio 更新到 4.0,现在我的构建出错了。
Cannot set the value of read-only property 'classDirectories' for task ':app:testNameOfMyFlavorDebugUnitTestCoverage' of type org.gradle.testing.jacoco.tasks.JacocoReport.
到目前为止它一直工作正常,我不知道要改变什么才能让它再次工作。
我无法获得jacoco/junit ant目标以从覆盖范围中排除类.我可以通过这样的方式来排除包:
<jacoco:coverage destfile="${coverage.reports.dir.xml}/output.jacoco" excludes="foo.*:bar.fiz.*:my.long.package.name.*">
Run Code Online (Sandbox Code Playgroud)
这并不排除我的测试类,因为测试类与它们测试的类在同一个包中.我已经厌倦了用正则表达式排除测试类,但它不起作用.
<jacoco:coverage destfile="${coverage.reports.dir.xml}/output.jacoco" excludes="foo.*:bar.fiz.*:**/Test.*:**/Tests.*">
Run Code Online (Sandbox Code Playgroud)
我还尝试在报告任务中包含我想要的类,但由于我们的测试类位于不起作用的相同包中.我们的构建将所有类放在同一目录中,例如buildRoot/classes/ProjectName.因此buildRoot/classes/ProjectName/foo将包含测试和非测试类的编译类.
有关如何让jacoco排除此设置中的所有测试的任何建议吗?
谢谢.
在JaCoCo生成的Maven站点报告中,由于我所有已编译的JSP都包含在内(并且它们很长),因此我的报道非常糟糕.我尝试了以下内容reporting:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<exclude>target/classes/jsp/**/*.class</exclude>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
另一个外观相似的配置在buildPOM的prepare-package相位部分.这并不能阻止JSP类包含在报告中.怎么避免呢?
我在项目中添加了一组没有测试的源代码,我不希望它们破坏我的测试覆盖率统计信息.我在下一个方面配置了Jacoco:
test {
jacoco{
excludes = ['org/bla/**']
includes = ['com/bla/**']
append = false
}
}
jacocoTestReport {
dependsOn test
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled true
html.enabled true
}
classDirectories = fileTree(dir: 'build/classes/main', include: 'com/bla/**')
sourceDirectories = fileTree(dir: 'scr/main/java', include: 'com/bla/**')
}
Run Code Online (Sandbox Code Playgroud)
但无论如何,在生成报告时,Jacoco还包括来自org.bla的类
有人能帮我吗 ?
编辑
经过一些调试后,似乎所有默认输出都添加到org.gradle.testing.jacoco.tasks.JacocoReport#classDirectories私有方法中org.gradle.testing.jacoco.plugins.JacocoPlugin#addDefaultReportTasks
使用此类代码时可见:
jacocoTestReport {
classDirectories = files('build/classes/main/com/bla')
println("-----------------------------------------------------------")
getAllClassDirs().each { File file ->
println(file.absolutePath)
}
println("-----------------------------------------------------------")
getAdditionalClassDirs().each{ File file ->
println(file.absolutePath)
}
} …Run Code Online (Sandbox Code Playgroud) 有没有办法从SonarQube中排除包(由gradle + sonar-runner配备)覆盖率报告(由jacoco生成),而不将它们完全排除在项目之外?
以下是我到目前为止尝试的内容:
// JaCoCo test coverage configuration
tasks.withType(Test) { task ->
jacoco {
append = false
// excluded classes from coverage defined in above configuration
excludes = excludedClasses()
}
jacocoTestReport {
doFirst {
classDirectories = fileTree(dir: "${buildDir}/classes/main/").exclude(excludedClasses())
}
}
}
Run Code Online (Sandbox Code Playgroud)
用于从声纳分析中排除包的属性设置.将此添加到我的配置会导致包在Sonar中根本不显示的情况.
property 'sonar.exclusions', excludedClasses().join(',')
Run Code Online (Sandbox Code Playgroud)
用于从jacoco中排除包的属性设置.设置此选项会导致包裹被排除在覆盖率分析之外,但会显示0%会累积到不良总分.
property 'sonar.jacoco.exclusions', excludedClasses().join(',')
Run Code Online (Sandbox Code Playgroud) 我正在为我的项目设置 Jacoco Gradle 插件。该插件运行良好并生成覆盖率报告,但它不排除我会排除的包。
我想包含的类在 com/xxx/ws/hn/** 中,我想排除的类在 com/xxx/ws/enterprise/** 中。
这是我的 Gradle 脚本:
apply plugin: "jacoco"
jacoco {
toolVersion = "0.6.2.201302030002"
reportsDir = file("$buildDir/reports/jacoco")
}
test {
jacoco{
excludes = ["com/xx/ws/enterprise/**/*"]
includes = ["com/xxx/ws/hn/**/*"]
append = false
}
}
jacocoTestReport {
dependsOn test
description = "Generate Jacoco coverage reports after running tests."
executionData = files('build/jacoco/test.exec')
reports {
xml.enabled true
html.enabled true
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?我尝试了各种排除模式,包括“。” 包的分隔符而不是“/”,但似乎没有任何作用。任何帮助将不胜感激。
我正在使用 Jacoco Maven 插件版本 0.8.1(使用 Java 8 / Maven 3.1.0)。无法让 Jacoco 使用路径排除。我想排除这些包:
my.package.modelmy.package.exception我试过的:
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.1</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
<configuration>
<excludes>
<exclude>my.package.model</exclude>
<exclude>my.package.exception</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.1</version>
<configuration>
<excludes>
<exclude>my.package.model</exclude>
<exclude>my.package.exception</exclude>
</excludes>
</configuration>
<reportSets>
<reportSet>
<reports>
<report>report</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
Run Code Online (Sandbox Code Playgroud)
还有(就excludes部分而言):
<excludes>
<exclude>my.package.model**</exclude>
<exclude>my.package.exception**</exclude>
</excludes>
<excludes>
<exclude>my/package/model/**/*</exclude>
<exclude>my/package/exception/**/*</exclude>
</excludes>
<excludes>
<exclude>*/my/package/model/**/*</exclude>
<exclude>*/my/package/exception/**/*</exclude>
</excludes>
<excludes>
<exclude>**/my/package/model/**/*</exclude>
<exclude>**/my/package/exception/**/*</exclude>
</excludes>
<excludes> …Run Code Online (Sandbox Code Playgroud) 我想从 JaCoCo 中排除一些类,但排除似乎不起作用。
例如,我想排除所有以 Dao 结尾的 Java 类(例如 com.company.EmplyeeDao)。
我已经尝试了以下代码,但当我将其推送到声纳/使用 JacocoTestReport 时,它仍然显示。
test {
jacoco {
append = true
destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
classDumpFile = file("$buildDir/jacoco/classpathdumps")
excludes = ['*Dao']
}
}
Run Code Online (Sandbox Code Playgroud)
我将其与 Android 结合使用。到底是怎么回事?
有没有人知道如何为包含多个gradle子模块的codecoverage的java jacoco报告配置gradle文件?
我当前的方法只显示当前子模块的代码覆盖,但不显示兄弟 - 子模块的代码覆盖.
我有这个项目结构
- build.gradle (1)
- corelib/
- build.gradle (2)
- src/main/java/package/Core.java
- extlib/
- build.gradle (3)
- src/main/java/package/Ext.java
- src/test/java/package/Integrationtest.java
Run Code Online (Sandbox Code Playgroud)
当我执行gradlew :extlib:check :extlib:jacocoTestReportjunit-test 时,执行"Integrationtest.java"并生成一个codecoverage报告,该报告不包含像Core.java这样的issib类的codecoverage
结果应该包括Ext.java和Core.java的代码库
我已经读过了
但没有发现任何线索
这是gradle文件的内容
// root build.gradle (1)
// Top-level build file where you can add configuration options
// common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
}
}
allprojects {
repositories {
jcenter()
}
}
Run Code Online (Sandbox Code Playgroud)
// build.gradle (2) subproject …Run Code Online (Sandbox Code Playgroud) 由于我的 Jenkins 管道失败,尝试从覆盖率报告中排除包。我有一个包含所有 POJO:s 的子项目。我不想为所有这些编写 uittest。因此,他们会降低分支/线路覆盖率,使覆盖率低于阈值并使我的构建失败。
应该可以排除一些软件包,但我无法让它工作。
我有以下 jacoco.gradle 文件:
apply plugin: 'jacoco'
apply plugin: 'java'
jacoco {
toolVersion = "0.8.2"
}
jacocoTestReport {
reports {
xml.enabled true
csv.enabled false
html.enabled true
}
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it, exclude: '**xxx/yyy/zzz/**')
})
}
task coverage { dependsOn 'jacocoTestReport' }
check.dependsOn 'jacocoTestReport'
Run Code Online (Sandbox Code Playgroud)
我的 sonar.gradle 文件中的以下内容:
apply plugin: 'org.sonarqube'
sonarqube {
properties {
property "sonar.forceAnalysis", "true"
property "sonar.forceAuthentication", "true"
property "sonar.java.coveragePlugin", "jacoco"
property "sonar.login", ""
property "sonar.password", ""
}
} …Run Code Online (Sandbox Code Playgroud) jacoco ×10
gradle ×6
java ×4
maven ×3
android ×2
build.gradle ×1
jenkins ×1
jsp ×1
sonar-runner ×1
sonarqube ×1