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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:36:02