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

SonarQube build-wrapper运行后未生成build-wrapper.json问题咨询

问题成因
  • 版本认知偏差:6.0及以上版本的build-wrapper,正常输出产物就只有build-wrapper-dump.json和build-wrapper.log两个文件,build-wrapper.json是早期旧版本的输出文件,新版本已经废弃该文件,不存在该文件属于正常情况,不是构建失败。
  • 路径配置不匹配:
    • 执行build-wrapper时指定的输出目录参数是--out-dir build_wrapper,但sonar-project.properties中配置的sonar.cfamily.build-wrapper-output指向的是bw-output,两个路径完全不一致,后续扫描会找不到构建输出。
    • make命令加了-C ./CSources参数,执行时会先切换工作目录到CSources子目录,此时写的相对路径build_wrapper会被创建在./CSources/build_wrapper下,而非项目根目录,进一步加剧路径错位问题。
  • sonar-project.properties存在配置错误:
    • 包含规则配置写错:sonar.inclusions-**/*.c,**/*.h的配置项名多了一个横杠,应该用等号连接键值,该配置完全不生效。
    • 存在无效配置:sonar.cxx.file.suffixes=.c是第三方社区C插件的配置项,官方SonarQube C/C分析插件不识别该配置;高版本SonarQube已经废弃sonar.language=c这种全局指定语言的配置,留用可能触发识别异常。
  • 潜在抓取失效风险:如果构建过程开了ccache之类的编译缓存,命中缓存时不会实际执行编译器调用,build-wrapper抓不到编译行为,会导致生成的dump文件为空,虽然两个文件都存在,但实际无法支撑扫描。
解决方法
  • 先验证build-wrapper版本:执行build-wrapper-linux-x86-64 --version,如果版本号为6.x及以上,不需要再寻找build-wrapper.json文件,只要输出目录下的两个文件存在、build-wrapper-dump.json大小不为0,且build-wrapper.log中能看到实际的gcc/clang编译命令记录,就说明构建抓取正常。
  • 统一输出路径配置:执行build-wrapper时用绝对路径指定输出目录,和sonar配置保持一致,示例命令:
    build-wrapper-linux-x86-64 --out-dir /export/home/binh/GtiAnalys/bw-output make -f /export/home/binh/GtiAnalys/makefile -C ./CSources clean libGtiAnalys.so
    
    该命令直接把输出目录指定到项目根目录下的bw-output,和sonar配置里的路径完全匹配,也不会受make切换工作目录的影响。
  • 修正sonar-project.properties中的错误配置:
    1. 把错误的包含规则行修改为sonar.inclusions=**/*.c,**/*.h
    2. 删除无效的sonar.cxx.file.suffixes=.c和sonar.language=c配置项
  • 临时禁用编译缓存:如果环境开了ccache,执行构建前先执行export CCACHE_DISABLE=1关闭缓存,保证全量编译过程的所有编译器调用都能被build-wrapper捕获。
  • 上述调整完成后,直接在项目根目录执行sonar-scanner即可正常触发C代码扫描,不需要等待不存在的build-wrapper.json生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:00:59