You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在apim-cli应用中为外部Maven模块apim-library生成Jacoco报告

如何让Jacoco报告包含外部Maven模块的代码覆盖率?

问题背景

  • 开发了基于Spring Shell的Maven模块apim-library,随后开发了依赖该模块的apim-cli应用,仅含带main方法的Application类
  • 在apim-cli的src/test/java目录下用JUnit5、Mockito编写单元测试,期望覆盖apim-library中的类
  • 使用环境:VSCode、Java 17、Spring Boot 3.1.3、Spring Shell 3.1.3、Jacoco 0.8.10、Maven 3.9.4
  • 当前状态:已成功执行mvn clean install构建apim-library,在apim-cli的pom.xml中配置了Jacoco插件,但执行mvn clean test和mvn jacoco:report后,仅生成Application类的覆盖率报告

解决方案

1. 确保apim-library构建时包含调试信息

Jacoco需要类文件中的调试符号才能准确统计覆盖率,因此要在apim-library的pom.xml中配置maven-compiler-plugin,开启调试模式:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <source>17</source>
                <target>17</target>
                <!-- 开启调试信息,Jacoco依赖此解析类结构 -->
                <debug>true</debug>
                <debuglevel>lines,vars,source</debuglevel>
            </configuration>
        </plugin>
    </plugins>
</build>

配置完成后,重新执行mvn clean install构建并安装apim-library。

2. 在apim-cli中配置Jacoco插件,显式包含apim-library的类

默认Jacoco仅统计当前模块的类,需修改apim-cli的Jacoco插件配置,添加includes标签指定外部模块的包路径:

<build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.10</version>
            <executions>
                <execution>
                    <id>prepare-agent</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>report</id>
                    <phase>test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                    <configuration>
                        <!-- 替换为apim-library实际的包路径,**匹配所有子包和类 -->
                        <includes>
                            <include>com/example/apim/library/**</include>
                            <!-- 保留当前模块的类统计 -->
                            <include>com/example/apim/cli/**</include>
                        </includes>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

3. 可选:让报告显示apim-library的源码

如果希望在Jacoco报告中直接查看apim-library的源码,需在apim-library中配置maven-source-plugin生成源码jar包:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>3.3.0</version>
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

重新执行mvn clean install后,apim-cli会自动依赖源码包,Jacoco报告即可加载并显示apim-library的源码。

验证操作

在apim-cli目录下执行:

mvn clean test jacoco:report

打开target/site/jacoco/index.html,就能看到apim-library中被测试覆盖的类的覆盖率数据。

内容的提问来源于stack exchange,提问作者Denis Berretti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:52:48