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

如何将target/generated-sources/jaxb目录纳入Jacoco覆盖率报告?

解决Jacoco报告未纳入target/generated-sources/jaxb目录、Sonar无法展示FOSSIL_CLIENT覆盖率的问题

要让Jacoco统计该目录的覆盖率并同步到Sonar,需从Jacoco配置、源码目录识别、Sonar配置三个环节入手,具体操作如下:

一、让Jacoco包含JAXB生成的类

Jacoco默认不会主动统计编译目录外的生成类,需显式配置纳入规则:

Maven项目配置

  1. 先通过build-helper-maven-plugin把target/generated-sources/jaxb标记为源码目录,确保编译时处理这些类:
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>3.4.0</version>
    <executions>
        <execution>
            <id>add-jaxb-source</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>target/generated-sources/jaxb</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>
  1. 调整Jacoco插件配置,指定包含该目录下的类:
<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>generate-report</id>
            <goals>
                <goal>report</goal>
            </goals>
            <configuration>
                <includes>
                    <include>**/fossil_client/**/*.class</include>
                    <include>**/target/generated-sources/jaxb/**/*.class</include>
                </includes>
            </configuration>
        </execution>
    </executions>
</plugin>

Gradle项目配置

  1. 将JAXB生成目录加入源码集:
sourceSets {
    main {
        java {
            srcDirs += 'target/generated-sources/jaxb'
        }
    }
}
  1. 配置Jacoco测试报告的包含规则:
jacocoTestReport {
    includes = [
        '**/fossil_client/**/*.class',
        '**/target/generated-sources/jaxb/**/*.class'
    ]
    reports {
        xml.required = true // Sonar依赖XML格式的报告
    }
}

二、配置SonarQube识别生成目录

Sonar默认只扫描主源码目录,需手动指定把JAXB生成目录加入源码和二进制文件目录:

Maven项目

在pom.xml的properties中添加:

<properties>
    <sonar.sources>src/main/java,target/generated-sources/jaxb</sonar.sources>
    <sonar.java.binaries>target/classes,target/generated-sources/jaxb</sonar.java.binaries>
    <sonar.jacoco.reportPaths>target/jacoco.exec</sonar.jacoco.reportPaths>
</properties>

Gradle项目

在build.gradle的Sonar配置块中添加:

sonarqube {
    properties {
        property 'sonar.sources', 'src/main/java,target/generated-sources/jaxb'
        property 'sonar.java.binaries', 'target/classes,target/generated-sources/jaxb'
        property 'sonar.jacoco.reportPath', 'build/jacoco/test.exec'
    }
}

三、验证操作

  1. 重新执行构建+测试+Jacoco报告生成:
    • Maven:mvn clean test jacoco:report,之后查看target/site/jacoco下的HTML报告,确认JAXB目录的类已被统计。
    • Gradle:gradle clean test jacocoTestReport,查看build/reports/jacoco/test/html目录下的报告。
  2. 执行Sonar扫描:mvn sonar:sonar(Maven)或gradle sonarqube(Gradle),扫描完成后去Sonar界面检查FOSSIL_CLIENT目录的覆盖率是否正常展示。

注意:如果配置后覆盖率还是0,要确认这些JAXB生成的类确实有对应的测试用例覆盖。另外,确保Jacoco和Sonar插件的版本兼容,避免版本冲突导致配置失效。

内容的提问来源于stack exchange,提问作者Bhuvan Bajaj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:15:26