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

SonarQube+Jacoco问题:Sonar无法读取配置的覆盖率报告路径

解决Sonar Scanner 3.1无法读取Jacoco覆盖率报告的问题

我之前帮朋友排查过类似的多模块项目覆盖率问题,结合Sonar Scanner 3.1和Java 1.7的环境,给你几个实用的排查和解决方向:

1. 先确认版本兼容性问题

Sonar Scanner 3.1对应的SonarQube版本一般是7.x系列,而Java 1.7对Jacoco的版本有严格要求——Jacoco从0.8.1开始就要求Java 1.8及以上了。如果你用了高于0.7.9的Jacoco版本,生成的test.exec文件可能在Java 1.7环境下无法被Sonar解析。建议把Jacoco版本降到0.7.9,再重新生成覆盖率报告试试。

2. 调整多模块项目的路径配置

多模块项目里,sonar.jacoco.reportPaths的路径是相对于每个模块的根目录,而不是项目根目录的全局路径。比如你的项目结构是:

项目根目录/
├── 模块A/
│   └── build/jacoco/test.exec
├── 模块B/
│   └── build/jacoco/test.exec

那你在项目根目录的sonar.properties里只需要配置:

sonar.jacoco.reportPaths=build/jacoco/test.exec

然后从项目根目录运行Sonar Scanner,每个模块会自动去自己的build/jacoco目录找test.exec。旧版本的Sonar Scanner对**/这种递归路径的支持不太稳定,别用全局通配符,反而容易出问题。

如果还是不行,你也可以在执行扫描时用命令行参数强制指定:

sonar-scanner -Dsonar.jacoco.reportPaths=build/jacoco/test.exec

3. 确认test.exec文件本身没问题

先手动检查每个模块的build/jacoco/test.exec:

  • 有没有生成?会不会是测试没运行,或者Jacoco插件配置错了导致报告为空?
  • 文件大小是不是非零?空文件Sonar肯定读不到。
  • Sonar Scanner运行的用户有没有读取这个文件的权限?比如CI环境里可能有权限限制,导致文件无法被访问。

如果是Maven项目,先手动跑mvn clean test jacoco:report,确保test.exec正常生成后再扫Sonar。

4. 检查SonarQube服务器的Jacoco插件版本

确保SonarQube服务器上安装的Jacoco插件和Scanner 3.1兼容,比如SonarQube 7.9对应的Jacoco插件版本是1.0.2左右,太新的插件可能不支持旧版Scanner。如果插件版本不匹配,也会出现读不到报告的情况。

5. 配置Jacoco的agent确保数据收集正确

有时候覆盖率数据没被正确收集,也会导致Sonar读不到有效内容。如果是Maven项目,可以在模块的pom.xml里配置Jacoco插件,强制在测试阶段收集覆盖率:

<build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.7.9</version>
            <executions>
                <execution>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>report</id>
                    <phase>test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

按这些步骤排查下来,大部分情况下都能解决Sonar读不到Jacoco报告的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:04:15