标签: jacoco

如何为 JaCoCo/SonarQube 配置 sonar.coverage.jacoco.xmlReportPaths?

SonarQube 7.7 针对 Java 项目分析显示以下警告:

不推荐使用属性“sonar.jacoco.reportPath”(JaCoCo 二进制格式)。应改用“sonar.coverage.jacoco.xmlReportPaths”(JaCoCo XML 格式)。

基于 Gradle 的项目配置sonar-project.properties如下:

sonar.projectKey=MyExampleLib
sonar.projectName=MyExample Library
sonar.sources=src/main/java
sonar.jacoco.reportPath=build/jacoco/test.exec
sonar.junit.reportsPath=build/test-results/test
sonar.java.test.binaries=build/classes/test
sonar.java.binaries=build/classes/java/main
sonar.binaries=build/classes
sonar.projectVersion=$libVersion
Run Code Online (Sandbox Code Playgroud)

SonarQube 服务器 URL 是通过以下方式注入的(否则最终会出现“localhost:9000”错误):

准备 SonarQube 扫描仪环境

SonarQube 分析通过 Jenkins 和JaCoCo 插件v.3.0.4触发,作业配置如下:

JaCoCo 配置

我读到 areport.xmlxmlReportPaths. 我怎样才能生成它?

有关的

jenkins jacoco sonarqube

12
推荐指数
2
解决办法
3万
查看次数

如何在 github 上创建具有测试覆盖率 (jacoco) 的徽章(操作)

在 spring 项目中,我使用 jacoco 插件来测量测试覆盖率。

我看到如下 html 报告:

在此处输入图片说明

现在我想用这个百分比向 github 项目添加一个徽章,如下所示:

在此处输入图片说明

知道如何将 jacoco 与 github 动作结合起来吗?

github gradle badge jacoco github-actions

12
推荐指数
2
解决办法
5564
查看次数

Kotlin JaCoCo,没有覆盖 -> IllegalClassFormatException ...请提供原始的非检测类

科特林版本: 1.3.61

Android Gradle 插件: 3.5.3

JaCoCo 版本: 0.8.4.201905082037(默认 android gradle 版本)

项目:https : //github.com/goldy1992/Mp3Player/tree/feature/issue-112/migrate-to-kotlin

我有一个多模块 gradle 项目:2 种风格:完整、自动化 2 种构建类型:发布、调试

我正在将所有内容迁移到 kotlin。

模块结构

  • commons [android library](在测试覆盖范围内按预期工作)
  • client-test-support(用于活动的测试实现)
  • 客户端 [android 库](无覆盖)-> 取决于公共资源,客户端测试支持
  • service-test-support(用于活动的测试实现)
  • 服务 [android 库](无覆盖)-> 取决于公共资源,服务测试支持
  • 应用程序 [android 应用程序] 没有测试

对于这篇文章的上下文,我只对单元测试感兴趣

测试按预期运行,但是由于某些(不是全部)kotlin 编译类被识别为“检测类”,因此没有生成覆盖率

错误出现在测试即将进行时,许多类都打印出以下内容:

    java.lang.instrument.IllegalClassFormatException: Error while instrumenting com/github/goldy1992/mp3player/client/views/viewholders/MediaPlayerTrackViewHolder.
        at org.jacoco.agent.rt.internal_035b120.CoverageTransformer.transform(CoverageTransformer.java:93)
        at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
        at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
        at java.security.AccessController.doPrivileged(Native Method)
        at …
Run Code Online (Sandbox Code Playgroud)

android code-coverage gradle jacoco kotlin

12
推荐指数
2
解决办法
3674
查看次数

JaCoCo在跳过JaCoCo执行之后才生成jacoco.exec

我在我的一个模块中通过JaCoCo生成AHP报告时遇到了麻烦.构建开始时,我看到JaCoCo正确设置了argLine:

[INFO] jacoco.agent.argLine set to -javaagent:<...>/.m2/repository/org/jacoco/org.jacoco.agent/0.7.2.201409121644/org.jacoco.agent-0.7.2.201409121644-runtime.jar=destfile=<...>/target/jacoco.exec
Run Code Online (Sandbox Code Playgroud)

但是,maven尝试运行JaCoCo时尚未创建.exec:

[INFO] Skipping JaCoCo execution due to missing execution data file:<...>/target/jacoco.exec
Run Code Online (Sandbox Code Playgroud)

在maven跳过JaCoCo执行后,jacoco.exec最终会被创建.因此,如果我在没有清理的情况下重新运行构建,我仍然可以生成AHP报告.

我已经在其他各种问题中看到,我需要小心使用Maven Surefire和JaCoCo.但是,我没有在我的Surefire插件或任何插件中明确使用argLine.我开始怀疑其他插件之一是否像JaCoCo一样自动劫持argLine参数.

以下是使用的所有插件的列表:

  • jacoco - Maven的插件
  • vertx - Maven的插件
  • Maven的资源 - 插件
  • Maven的依赖关系的插件
  • Maven的万无一失,插件
  • Maven的故障保护,插件
  • Maven的万无一失报告,插件
  • 行家组装-插件

我确实在构建输出中看到一条可疑消息:

[INFO] --- maven-compiler-plugin:3.0:compile (default-compile) @ <module> ---
[INFO] Changes detected - recompiling the module!
Run Code Online (Sandbox Code Playgroud)

我不确定这是否相关,但它在跳过消息之前出现了两次,并且没有出现在JaCoCo正常工作的模块中.

有任何想法吗?

*编辑 - 这是jacoco配置

    <plugins>
        <...>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>${jacoco.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>report</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <pluginManagement>
        <plugins>
            <!--This …
Run Code Online (Sandbox Code Playgroud)

maven jacoco

11
推荐指数
3
解决办法
3万
查看次数

如何在gradle中将jacoco代码覆盖级别设置为模块

我正在使用gradle 4.3.1和jacoco插件,我能够在多模块项目中确保一定程度的代码覆盖率.当我将元素设置为CLASSPACAKAGE时,这很有,但我很难理解如何让它适用于模块.

这里我想我要的是管束集团,但后来当我去覆盖量下jacoco不破.

以下是我所拥有的适用于包级别覆盖实施的示例:

jacocoTestCoverageVerification {
    violationRules {
        rule {
            // should be element = 'BUNDLE' or 'GROUP'? 
            element = 'PACKAGE'

            limit {
                minimum = 0.9
            }
            includes = ['com.mypackage.*']
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我将元素值更改为BUNDLE时,无论覆盖范围如何,构建都不会失败.我希望能够在模块级别控制期望值.

这是我的gradle版本信息:

------------------------------------------------------------
Gradle 4.3.1
------------------------------------------------------------

Build time:   2017-11-08 08:59:45 UTC
Revision:     e4f4804807ef7c2829da51877861ff06e07e006d

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_40 (Oracle Corporation 25.40-b25)
OS: …
Run Code Online (Sandbox Code Playgroud)

java code-coverage gradle jacoco build.gradle

11
推荐指数
1
解决办法
448
查看次数

Gradle:无法在Intellij中设置未知属性'classDumpFile'

我一直在通过互联网搜索并询问irc聊天,但他们都没有或没有给出任何答案来试图解决我的问题.

我试图让我的项目JaCoCoIntellijIDE 上使用,测试将在Jenkins服务器中完成,我已经在我的gradle.build文件中设置了一些设置,JaCoCo但是编译失败说Could not set unknown property 'classDumpFile' for object of type org.gradle.testing.jacoco.plugins.JacocoTaskExtension.

构建文件是这样的:

version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'jacoco'

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

jacoco{
    toolVersion = '0.7.6.201602180812'
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.5'
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.6'
    compile group: 'org.json', name: 'json', version: '20180130'
}
test{
    jacoco { …
Run Code Online (Sandbox Code Playgroud)

java intellij-idea gradle jacoco

11
推荐指数
2
解决办法
9038
查看次数

JaCoCo 报告生成出错

我目前正在尝试将 JaCoCo 添加为我的 Spring Boot maven 项目的依赖项,以查看我的单元测试的代码覆盖率。但是,当我运行测试时,它失败并显示错误。

 Failed to execute goal org.jacoco:jacoco-maven-plugin:0.8.3:report (report) on project test-rest-service: An error has occurred in JaCoCo report generation. Error while creating report: malformed input around byte 2 -> [Help 1]
Run Code Online (Sandbox Code Playgroud)

所有测试都通过而没有失败,所以这不是问题。

JaCoCo 的依赖项是:

   <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.3</version>
            <executions>
                <execution>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>report</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
    </plugin>
Run Code Online (Sandbox Code Playgroud)

生成了 JaCoCo.exec 文件,但我无法打开它来生成报告。我究竟做错了什么?

java maven jacoco jacoco-maven-plugin

11
推荐指数
2
解决办法
6824
查看次数

如何在构建期间跳过 jacoco 覆盖率检查?

在我们的项目中,我们使用jacoco-maven-plugin并在构建过程中出现此错误:

[ERROR] Failed to execute goal org.jacoco:jacoco-maven-plugin:0.8.5:check (jacoco-check) on project my-project: Coverage checks have not been met. See log for details. 
Run Code Online (Sandbox Code Playgroud)

我知道最好修复覆盖范围等等。但有时我只需要快速构建一个项目。是否有某种参数用于此目的?喜欢mvn clean install -Dskip.jacoco.check=true或其他方式快速跳过此检查?

skip maven jacoco jacoco-maven-plugin

11
推荐指数
2
解决办法
1万
查看次数

JaCoCo 不会在多项目的 HTML 覆盖率报告中显示源文件

我正在使用 PDE,并在 build.xml 中编译代码并尝试使用 JaCoCo 和 JUnit 创建覆盖率报告。我注意到它现在确实显示了源文件,即使我sourcefiles在. 为了调试它(因为它不打印任何错误),我尝试在本地运行它:structurejacoco:report

java -jar jacoco/jacococli.jar report /buildFiles/coverage/jacoco.exec --classfiles /buildFiles/plugins/com.gandu.da.util.test/bin/com/gandu/da/util/test/AllTests.class --sourcefiles /buildFiles/plugins/com.gandu.da.util.test/src/com/gandu/da/util/test/AllTests.java --html html_report
Run Code Online (Sandbox Code Playgroud)

但它仍然没有显示 html 文件中的源代码。在JaCoCo 官方常见问题解答中我看到:

为什么覆盖率报告不显示突出显示的源代码?确保满足以下先决条件才能在 JaCoCo 覆盖率报告中突出显示源代码:

  • 类文件必须使用调试信息进行编译以包含行号。
  • 必须在报告生成时正确提供源文件。即指定的源文件夹必须是定义 Java 包的文件夹的直接父级。

我用标志编译了代码-g以获取所有信息 - 它不起作用。另外我相信我确实按预期提供了 src/bin 文件,所以我不确定为什么它不起作用。如何让它发挥作用?

编辑:我必须提供src目录:

java -jar jacoco/jacococli.jar report /buildFiles/coverage/jacoco.exec --classfiles /buildFiles/plugins/com.gandu.da.util.test/bin/com/gandu/da/util/test/AllTests.class --sourcefiles /buildFiles/plugins/com.gandu.da.util.test/src
# WORKED!
Run Code Online (Sandbox Code Playgroud)

现在我想用我的 build.xml 解决这个问题。代码:

<jacoco:report>
    <executiondata>
        <file file="${coverage.file}"/>
    </executiondata>
    <structure name="Coverage Report">
        <classfiles>
            <fileset dir="${buildDirectory}/plugins/com.gandu.da.util.test/bin">
                <include name="**/*.class" />
            </fileset>
        </classfiles> …
Run Code Online (Sandbox Code Playgroud)

java code-coverage eclipse-pde jacoco

11
推荐指数
1
解决办法
2480
查看次数

Android:gradle 升级到 7.0.x 和 jdk 11 后不会生成 Jacoco 代码覆盖率

Android:使用 .gradle 升级到 7.0.x 和 jdk 11 后,不会生成 Jacoco 代码覆盖率testCoverageEnabled true。它与 gradle 4.2.x 和 jdk 8 完美配合。

我尝试testCoverageEnabled true使用 gradle 7.0.x 进行删除,它再次开始工作。即使将其设置为false ( testCoverageEnabled false),它也会起作用。但 jacoco 文档说将其标记为true仅用于生成测试覆盖率报告。

在 gradle 4.2 和 jdk 8 中,它工作得很好,现在在 gradle 7.0 和 jdk 11 中,它在删除布尔值后可以正常工作。

谁能帮助我更多地了解如果删除testCoverageEnabled true或设置为false的话它是如何工作的?

android gradle jacoco android-gradle-plugin android-gradle-7.0

11
推荐指数
1
解决办法
2244
查看次数