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

Travis CI未向SonarCloud发送Jacoco报告问题排查求助

解决SonarCloud不显示Jacoco覆盖率报告的问题

我仔细梳理了你的配置和Travis日志,发现几个关键问题导致SonarCloud无法获取Jacoco的覆盖率数据,下面是针对性的修复方案:

1. 修正Travis CI脚本的命令顺序与Sonar集成逻辑

你的.travis.yml存在两个问题:一是mvn install -P test先执行了打包,后续的clean会清空之前的构建数据,导致Jacoco的测试执行记录丢失;二是同时使用Travis的sonarcloud addon和mvn sonar:sonar命令,容易引发参数冲突。

修改后的.travis.yml配置:

script:
  - mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent package -P test
  - mvn org.jacoco:jacoco-maven-plugin:report sonar:sonar
addons:
  sonarcloud:
    organization: "my_organization_name_on_SonarCloud"
    token:
      secure: "${SONAR_TOKEN}"
  • 先执行clean清空历史数据,接着用prepare-agent初始化Jacoco代理,再执行package(包含测试用例运行),确保Jacoco能完整记录测试覆盖率数据
  • 单独执行jacoco:report生成标准格式的覆盖率报告,最后执行sonar:sonar把数据上传到SonarCloud
  • 明确配置sonarcloud的token参数,避免认证环节出现隐性问题

2. 优化sonar-project.properties的路径配置

你当前设置sonar.sources=.会把项目根目录下所有文件(包括测试代码、配置文件)都当作业务源码,这会干扰SonarCloud的覆盖率计算逻辑。需要精准指定源码和报告路径:

sonar.projectKey=my_project_key_on_SonarCloud
sonar.projectName=my_project_name
sonar.projectVersion=0.0.1
sonar.sources=src/main/java
sonar.java.binaries=target/classes
sonar.jacoco.reportPaths=target/site/jacoco/jacoco.xml
  • sonar.sources指定为src/main/java,只扫描业务代码
  • sonar.java.binaries告诉SonarCloud编译后的字节码位置,帮助它关联源码和覆盖率数据
  • sonar.jacoco.reportPaths明确指定Jacoco生成的XML报告路径,确保SonarCloud能精准读取覆盖率信息

3. 调整Jacoco插件的报告生成阶段

你的Jacoco插件把report阶段设为prepare-package,这会在打包过程中生成报告,但后续操作可能覆盖或损坏报告文件。建议把报告生成调整到测试完成后:

<plugin>
  <groupId>org.jacoco</groupId>
  <artifactId>jacoco-maven-plugin</artifactId>
  <version>0.8.3</version>
  <executions>
    <execution>
      <id>default-prepare-agent</id>
      <goals>
        <goal>prepare-agent</goal>
      </goals>
    </execution>
    <execution>
      <id>default-report</id>
      <phase>test</phase>
      <goals>
        <goal>report</goal>
      </goals>
    </execution>
  </executions>
</plugin>
  • 将report的执行阶段改为test,确保测试用例执行完成后立即生成覆盖率报告,避免数据丢失

4. 验证Travis日志中的Sonar执行状态

从你的日志看到$ The command "" exited with 0.,说明Sonar扫描命令没有正确触发。修改配置后,重新触发Travis构建,应该能看到SonarScanner的完整执行日志,其中会包含覆盖率数据上传的相关记录。

完成以上修改后,SonarCloud应该就能正常展示Jacoco的覆盖率报告了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:43:22