如何在TeamCity中集成多个jacocoReport并避免报告覆盖?
解决TeamCity中多个Jacoco报告被覆盖的问题
你遇到的问题是因为TeamCity默认会用最后一条jacocoReport指令的配置覆盖前面的,要生成两份独立报告,只需给每条jacocoReport指令添加唯一的name属性,TeamCity就会识别为两个不同的覆盖率报告,不会互相覆盖。
修改后的脚本如下:
mvn test -Djacoco.percentage.instruction=0.00 echo "##teamcity[jacocoReport name='模块1覆盖率' dataPath='projectPath/target/coverage-reports/jacoco-unit.exec' includes='com.project.test.*' sources='projectPath/src/main/java' reportDir='projectPath/target/temp/jacocoReport']" echo "##teamcity[jacocoReport name='模块2覆盖率' dataPath='projectPath2/target/coverage-reports/jacoco-unit.exec' includes='com.project.test2.*' sources='projectPath2/src/main/java' reportDir='projectPath2/target/temp/jacocoReport']"
注意事项:
- 确保两个
reportDir的路径完全独立,避免生成的报告文件互相覆盖 name属性的值可自定义,只要两份不同即可,方便在TeamCity构建结果中区分
如果需要生成一份合并的综合覆盖率报告,也可以先合并两个Jacoco的exec文件,再生成单份报告:
mvn test -Djacoco.percentage.instruction=0.00 # 使用Jacoco CLI工具合并exec文件(需提前准备jacoco-cli.jar) java -jar jacoco-cli.jar merge projectPath/target/coverage-reports/jacoco-unit.exec projectPath2/target/coverage-reports/jacoco-unit.exec --destfile target/merged-jacoco.exec # 生成合并后的覆盖率报告 echo "##teamcity[jacocoReport name='合并覆盖率' dataPath='target/merged-jacoco.exec' includes='com.project.test.*,com.project.test2.*' sources='projectPath/src/main/java,projectPath2/src/main/java' reportDir='target/temp/merged-jacocoReport']"
内容的提问来源于stack exchange,提问作者NotACat
相关产品推荐
相关产品推荐

