如何在GitLab Pipeline中用Ant+Jacoco为Java添加代码覆盖率排除项(无Sonar)
在GitLab Pipeline中通过Ant与Jacoco配置代码覆盖率排除项
GitLab本身没有直接对应Sonar -Dsonar.coverage.exclusions 的全局命令或属性,需要通过Ant的Jacoco任务配置来实现排除规则,再结合GitLab Pipeline执行Ant脚本完成覆盖率统计。以下是具体实现方式:
1. 在Ant脚本中配置Jacoco排除项
Jacoco通过对编译后的class文件插桩来统计覆盖率,因此排除规则需要针对class文件路径设置,核心是在jacoco:coverage任务的instrumentation模块中使用<exclude>标签定义规则:
<!-- 示例Ant脚本片段 --> <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml"> <classpath path="${jacoco.lib.path}/jacocoant.jar"/> </taskdef> <target name="jacoco-coverage"> <jacoco:coverage destfile="${build.dir}/jacoco.exec"> <instrumentation> <fileset dir="${build.dir}/classes"> <!-- 排除指定路径和类文件,通配符规则与Sonar类似 --> <exclude name="**/testsrc/**"/> <exclude name="**/soap/**"/> <exclude name="**Exception.class"/> </fileset> </instrumentation> <!-- 执行单元测试(根据你的项目实际配置调整) --> <junit fork="true" printsummary="on" failureproperty="test.failed"> <classpath> <pathelement location="${build.dir}/classes"/> <pathelement location="${build.dir}/test-classes"/> <path refid="test.classpath"/> </classpath> <formatter type="xml"/> <batchtest todir="${build.dir}/test-results"> <fileset dir="${src.test.dir}"> <include name="**/*Test.java"/> </fileset> </batchtest> </junit> </jacoco:coverage> <!-- 生成覆盖率报告(可选) --> <jacoco:report> <executiondata> <file file="${build.dir}/jacoco.exec"/> </executiondata> <structure name="My Project"> <classfiles> <fileset dir="${build.dir}/classes"> <!-- 报告生成时同样需要排除对应类,避免统计到排除项 --> <exclude name="**/testsrc/**"/> <exclude name="**/soap/**"/> <exclude name="**Exception.class"/> </fileset> </classfiles> <sourcefiles encoding="UTF-8"> <fileset dir="${src.main.dir}"/> </sourcefiles> </structure> <html destdir="${build.dir}/jacoco-report"/> </jacoco:report> </target>
关键说明:
- 排除规则针对编译后的class文件,因此后缀是
.class而非源码的.java - 通配符语法与Sonar一致:
**匹配任意层级目录,*匹配任意文件名 - 如果需要生成覆盖率报告,报告模块的
<classfiles>也需要同步添加排除规则,否则报告中仍会出现被排除的类
2. 在GitLab Pipeline中执行Ant脚本
在.gitlab-ci.yml中定义执行Ant任务的Job,使用包含Ant环境的镜像即可:
stages: - test jacoco_coverage: stage: test image: openjdk:17-jdk-slim before_script: - apt-get update && apt-get install -y ant script: - ant jacoco-coverage # 执行定义好的Jacoco覆盖率目标 artifacts: paths: - build/jacoco-report/ # 保留覆盖率报告供查看 expire_in: 7 days
内容的提问来源于stack exchange,提问作者amu
相关产品推荐
相关产品推荐

