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

非生成代码如何排除特定方法在Jacoco扫描范围之外?

排除特定方法在Jacoco扫描范围外的可行方案

有几种实用的方法可以精准实现这个需求,不用改动核心业务逻辑:

  • 给目标方法添加@Generated注解
    Jacoco默认会跳过带有javax.annotation.Generated(Java 8及更早版本)或jakarta.annotation.Generated(Java 9+)注解的方法,不管代码是否为自动生成,你可以手动给要排除的方法加上这个注解:

    import javax.annotation.Generated;
    
    public class YourService {
        // 该方法会被Jacoco忽略扫描
        @Generated("手动标记排除Jacoco")
        public void skipThisMethod() {
            // 方法逻辑
        }
    
        // 正常参与Jacoco扫描的方法
        public void processBusinessLogic() {
            // 业务逻辑代码
        }
    }
    

    如果项目中没有这个注解的依赖,直接引入javax.annotation-api或jakarta.annotation-api即可。

  • 自定义注解+Jacoco配置识别
    不想用官方注解的话,可以自己定义专属注解,再配置Jacoco忽略带该注解的方法:

    1. 先编写自定义注解:
      import java.lang.annotation.ElementType;
      import java.lang.annotation.Retention;
      import java.lang.annotation.RetentionPolicy;
      import java.lang.annotation.Target;
      
      @Retention(RetentionPolicy.RUNTIME)
      @Target(ElementType.METHOD)
      public @interface ExcludeFromJacoco {
      }
      
    2. 在构建工具中配置Jacoco识别并忽略该注解:
      Maven的pom.xml配置示例:
      <plugin>
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>0.8.11</version>
          <configuration>
              <excludes>
                  <exclude>**/*ExcludeFromJacoco*</exclude>
              </excludes>
          </configuration>
          <!-- 其他执行环节配置... -->
      </plugin>
      
      Gradle的build.gradle配置示例:
      jacocoTestReport {
          excludes = ['**/*ExcludeFromJacoco*']
      }
      
      jacocoTestCoverageVerification {
          violationRules {
              rule {
                  excludes = ['**/*ExcludeFromJacoco*']
              }
          }
      }
      
    3. 给目标方法添加自定义注解:
      public class YourService {
          @ExcludeFromJacoco
          public void skipThisMethod() {
              // 方法逻辑
          }
      }
      
  • 直接通过配置指定方法全限定名排除
    不想修改代码的话,直接在Jacoco配置中写死要排除的方法全路径,适合临时排除场景:
    Maven配置示例:

    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.8.11</version>
        <configuration>
            <excludes>
                <!-- 格式:包名.类名.方法名(参数类型) -->
                <exclude>**/YourService.skipThisMethod()</exclude>
                <!-- 带参数的方法需明确参数类型,比如String参数:**/YourService.skipThisMethod(java.lang.String) -->
            </excludes>
        </configuration>
    </plugin>
    

    Gradle配置示例:

    jacocoTestReport {
        excludes = [
            '**/YourService.skipThisMethod()',
            '**/YourService.skipThisMethod(int)'
        ]
    }
    

    注意:参数类型要写全限定名,避免匹配错误。

内容的提问来源于stack exchange,提问作者Ajay Sabarish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:17:06