如何在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
相关产品推荐
相关产品推荐

