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

配置Jacoco后SonarQube代码覆盖率仍为0%的问题求助

问题:GitHub Actions自托管Runner执行Sonar扫描时覆盖率始终为0%

我已按照Jacoco和SonarQube官方文档完成配置,Sonar服务器部署在自托管Runner上。Sonar UI中sonar.coverage.jacoco.xmlReportPaths参数留空(默认路径为target/site/jacoco/jacoco.xml),本地执行mvn test时能在对应路径生成XML报告及HTML覆盖率页面。但通过GitHub Actions的自托管Runner执行扫描时,Sonar UI可识别新增代码,代码覆盖率却始终显示0%。我曾尝试在pom.xml和Sonar GUI中指定报告路径,问题仍未解决,且无报错日志,Sonar容器日志显示覆盖率计算步骤执行成功。


工作流文件

name: SonarQube

on:
  workflow_dispatch:
  pull_request:

jobs:

  scanning:
    runs-on: self-hosted
    steps:
      - name: Checkout repo
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Set up JDK 21
        uses: actions/setup-java@v1
        with:
          java-version: 21

      - name: Configure Maven settings
        uses: whelk-io/maven-settings-xml-action@v22
        with:......

      - name: Cache Maven packages
        uses: actions/cache@v1
        with:
          path: ~/.m2
          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
          restore-keys: ${{ runner.os }}-m2
      - name: Build and analyze
        env:
          SONAR_TOKEN: ${{ ... }}
          SONAR_HOST_URL: ${{ ... }}
        run: mvn -B verify -DskipTests org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=... -Dsonar.projectName='...'

pom.xml中的Jacoco插件配置

<plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>${jacoco.version}</version>
        <executions>
          <execution>
            <id>prepare-agent</id>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
          </execution>
          <execution>
            <id>report</id>
            <phase>test</phase>
            <goals>
              <goal>report</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

pom.xml中的属性配置

<jacoco.version>0.8.10</jacoco.version>
    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>

pom.xml中的Jacoco依赖

<dependency>
      <groupId>org.jacoco</groupId>
      <artifactId>jacoco-maven-plugin</artifactId>
      <version>0.8.11</version>
    </dependency>

Sonar容器日志片段

2024.05.06 10:44:06 INFO  ce[b5aba757-5a3e-4285-bddc-eda685e8126e][o.s.c.t.s.ComputationStepExecutor] Compute new coverage | status=SUCCESS | time=34ms
2024.05.06 10:44:06 INFO  ce[b5aba757-5a3e-4285-bddc-eda685e8126e][o.s.c.t.s.ComputationStepExecutor] Compute coverage measures | status=SUCCESS | time=1ms
2024.05.06 10:44:06 INFO  ce[b5aba757-5a3e-4285-bddc-eda685e8126e][o.s.c.t.s.ComputationStepExecutor] Compute comment measures | status=SUCCESS | time=0ms

相关截图

Sonar覆盖率显示0%
Sonar配置页面


排查建议

  1. 移除-DskipTests参数:扫描命令中添加的-DskipTests会跳过测试执行,Jacoco的覆盖率数据依赖测试阶段生成,跳过测试自然不会产生有效报告。建议调整命令为mvn -B test org.sonarsource.scanner.maven:sonar-maven-plugin:sonar ...。
  2. 统一Jacoco版本:pom.xml中插件版本为0.8.10,依赖版本为0.8.11,版本不一致可能引发兼容性问题,建议统一为同一版本。
  3. 验证自托管Runner上的报告生成:在工作流中添加步骤,执行ls -la target/site/jacoco/,确认jacoco.xml文件是否存在,排除报告未生成的情况。
  4. 明确指定Sonar报告路径:在Sonar扫描命令中添加-Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml,强制指定报告路径,避免路径识别偏差。
  5. 检查Maven生命周期执行顺序:确保test阶段在Sonar扫描前执行,可拆分命令为mvn test + mvn sonar:sonar,分步验证各阶段执行结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:51:14