• JaCoCo Maven 插件 - 聚合多模块maven 报告


    背景

    代码覆盖率是一个指标,可以帮助您了解测试了多少源代码。这是一个非常有用的指标,可以帮助您评估测试套件的质量。测试覆盖率高的程序在测试期间执行的源代码更多,这表明与测试覆盖率低的程序相比,它包含未检测到的软件错误的机会更低。所以,这真的取决于你的测试写得有多好。

    在本文中,可以了解如何使用JaCoCo Maven 插件和 target - report-aggregate为多模块 Maven 项目生成组合代码覆盖率报告。

    JaCoCo是Java Code Coverage 的缩写形式。它提供了两种代码检测模式。

    1. Java 代理 - 在使用 Java 代理运行代码时即时检测字节码
      离线 - 离线模式下的覆盖(即在执行代码之前)。这种代码覆盖模式不是很流行,通常用于特殊情况。
    2. maven 插件方式,本文介绍

    汇总原理

    报告聚合目标通常用于多模块 Maven 项目。该报告是从项目所依赖的所有模块创建的。

    要为多模块 Maven 项目生成报告,需要进行以下设置。

    parent/
    ├── child-module1
    ├── child-module2
    ├── reports <— 添加对 child-module1 和 child-module2 模块的依赖
    └── pom.xml
    当您运行构建以使用report-aggregate目标生成聚合报告时,会在reports模块中为整个项目生成报告。

    让我们使用report-aggregate为一个多模块 Maven 项目生成一个报告,看看实际情况。

    demo项目

    下面时使用的多模块 Maven 项目结构。
    我们有三个子模块

    • maven-jacoco-multi-module-demo-numbers
    • maven-jacoco-multi-module-demo-strings
    • maven-jacoco-multi-module-demo-reports
    parent
    ├── pom.xml
    |
    ├── maven-jacoco-multi-module-demo-numbers
    │   ├── pom.xml
    │   └── src
    │       ├── main/java
    │       │       └── io/codejournal/maven/jacoco/numbers
    │       │                                       └── LastDigit.java
    │       └── test/java
    │               └── io/codejournal/maven/jacoco/numbers
    │                                               └── LastDigitTest.java
    |
    ├── maven-jacoco-multi-module-demo-strings
    │   ├── pom.xml
    │   └── src
    │       ├── main/java
    │       │       └── io/codejournal/maven/jacoco/strings
    │       │                                       └── HelloName.java
    │       └── test/java
    │               └── io/codejournal/maven/jacoco/strings
    │                                               └── HelloNameTest.java
    |
    └── maven-jacoco-multi-module-demo-reports
        └── pom.xml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    父模块 - pom.xml

    在parent 的 pom.xml中,我们配置项目坐标、编译器属性、子模块、 JUnit Jupiter和AssertJnumbers, strings and report的依赖项,以及包括Maven Surefire 插件和JaCoCo Maven 插件的插件。

    对于JaCoCo Maven 插件,我们还添加了prepare-agent和report目标的执行,这样当构建运行时,所有子模块都可以单独生成它们的报告。


    4.0.0

    io.codejournal.maven.jacoco
    maven-jacoco-multi-module-demo
    0.0.1-SNAPSHOT
    pom
    
    
        maven-jacoco-multi-module-demo-numbers
        maven-jacoco-multi-module-demo-strings
        maven-jacoco-multi-module-demo-reports
    
    
    
        UTF-8
        11
        11
    
    
    
        
            org.junit.jupiter
            junit-jupiter-api
            5.8.2
            test
        
        
            org.assertj
            assertj-core
            3.19.0
            test
        
    
    
    
        
        
            
                org.apache.maven.plugins
                maven-surefire-plugin
                3.0.0-M5
            
            
    
            
                org.jacoco
                jacoco-maven-plugin
                0.8.8
                
                    
                        jacoco-prepare-agent
                        
                            prepare-agent
                        
                    
                    
                        jacoco-report
                        
                            report
                        
                    
                
            
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    两个业务子模块

    maven-multi-module-demo-numbers & maven-multi-module-demo-strings

    两个是需要写代码和ut的模块,当然也可以把单测统一写到report 上面(通常我是把springboot 的启动类所在模块作为report)

    聚合报告模块

    maven-multi-module-demo-reports

    这是将生成汇总报告的模块。

    它需要添加maven-jacoco-multi-module-demo-numbers和maven-jacoco-multi-module-demo-strings作为依赖项,以便reports模块在最后运行。

    这样,所有依赖模块的覆盖率数据都会生成并可用,report-aggregate目标可以使用并生成组合报告。

    这里是pom.xml.

    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
    
        <parent>
            <groupId>io.codejournal.maven.jacocogroupId>
            <artifactId>maven-jacoco-multi-module-demoartifactId>
            <version>0.0.1-SNAPSHOTversion>
        parent>
    
        <artifactId>maven-jacoco-multi-module-demo-reportsartifactId>
    
        <dependencies>
            <dependency>
                <groupId>io.codejournal.maven.jacocogroupId>
                <artifactId>maven-jacoco-multi-module-demo-numbersartifactId>
                <version>${project.version}version>
            dependency>
            <dependency>
                <groupId>io.codejournal.maven.jacocogroupId>
                <artifactId>maven-jacoco-multi-module-demo-stringsartifactId>
                <version>${project.version}version>
            dependency>
        dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.jacocogroupId>
                    <artifactId>jacoco-maven-pluginartifactId>
                    <version>0.8.8version>
                    <executions>
                        <execution>
                            <id>jacoco-report-aggregateid>
                            
                            <phase>testphase>
                            <goals>
                                <goal>report-aggregategoal>
                            goals>
                        execution>
                    executions>
                plugin>
            plugins>
        build>
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    现在让我们运行构建mvn clean test,您将获得生成的覆盖率数据。这是构建日志的输出片段。



    [信息] — jacoco-maven-plugin:0.8.8:report-aggregate (jacoco-report-aggregate) @ maven-jacoco-multi-module-demo-reports —
    [INFO] 加载执行数据文件 /home/codejournal/workspace/maven-jacoco-multi-module-demo/maven-jacoco-multi-module-demo-numbers/target/jacoco.exec
    [INFO] 加载执行数据文件 /home/codejournal/workspace/maven-jacoco-multi-module-demo/maven-jacoco-multi-module-demo-strings/target/jacoco.exec
    [INFO] 分析了包含 1 个类的捆绑包 ‘maven-jacoco-multi-module-demo-numbers’
    [INFO] 分析了包含 1 个类的捆绑包 ‘maven-jacoco-multi-module-demo-strings’
    [信息] --------------------------------------------- -------------------------
    [INFO] maven-jacoco-multi-module-demo 0.0.1-SNAPSHOT 的反应堆摘要:
    [信息]
    [信息] maven-jacoco-multi-module-demo …成功 [ 0.186 s]
    [信息] maven-jacoco-multi-module-demo-numbers … 成功 [ 2.091 s]
    [信息] maven-jacoco-multi-module-demo-strings … 成功 [ 1.051 s]
    [信息] maven-jacoco-multi-module-demo-reports … 成功 [ 0.030 s]
    [信息] --------------------------------------------- -------------------------
    最终的合并报告可在reports模块中找到target/site/jacoco-aggregate。注意文件jacoco-aggregate夹路径中的文件夹。

    -> 树 maven-jacoco-multi-module-demo-reports/target
    maven-jacoco-multi-module-demo-reports/target
    ├── maven-archiver
    │ └── pom.properties
    ├── maven-jacoco-multi-module-demo-reports-0.0.1-SNAPSHOT.jar
    └── 网站
        └── jacoco-aggregate <-------- 文件夹是 jacoco-aggregate
            ├── index.html
            ├── jacoco.csv
            ├── jacoco-资源
            ├── jacoco-sessions.html
            ├── jacoco.xml
            |
            ├── maven-jacoco-multi-module-demo-numbers <-------- numbers 模块报告
            │ └── index.html
            |
            └── maven-jacoco-multi-module-demo-strings <-------- 字符串模块的报告
                └── index.html
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    最终报告结果

    在这里插入图片描述

    最后,有什么疑问可以评论区留言如果觉得有帮助到您,帮忙一键三连~~

  • 相关阅读:
    web课程设计:HTML非遗文化网页设计题材【京剧文化】HTML+CSS+JavaScript
    dll文件反编译源代码 C#反编译 dotpeek反编译dll文件后export
    使用HTML+CSS技术制作篮球明星介绍网站
    弹窗里面画echarts图 el-popover
    Win32简单图形界面程序逆向
    单商户商城系统功能拆解29—营销中心—会员折扣
    html+javascript 编写的自动根据当前时间问好 早上 中午下午 晚上 还有下班倒计时等等
    java jvm用到的各种工具
    QT源码拾贝6-10(qwindowswindow)
    redis开启ipv6访问
  • 原文地址:https://blog.csdn.net/qq_35530042/article/details/126538710