创建Gradle任务本地运行Sonar无效果,求排查解决方法
问题解决思路
你的自定义任务sonarLocalReport没生成内容的核心原因有两个:
- 任务仅设置了Sonar属性,但没有触发Sonar的分析任务,相当于只做了配置,没执行实际的扫描分析。
- 属性设置的方式不正确,直接修改
extraProperties不是Sonar Gradle插件推荐的配置方式。
修正方案
1. 依赖Sonar核心分析任务
Sonar Gradle插件的核心分析任务在新版本中是sonarQube,旧版本可能是sonar。需要把这个任务加入自定义任务的依赖列表,执行sonarLocalReport时会自动触发扫描。
2. 正确配置本地Sonar属性
使用Sonar扩展的properties方法配置属性,并且放在doFirst中(确保在Sonar任务执行前完成配置)。
修正后的自定义任务代码:
task sonarLocalReport(dependsOn: ['jacocoTestReport', 'lint', 'sonarQube']) { group = "Reporting" description = "Generate Sonar reports for local check" doFirst { sonar { properties { // 覆盖本地Sonar服务的地址和登录密钥 property "sonar.host.url", "http://localhost:9000" property "sonar.login", "KEY" // 如需临时覆盖其他全局属性,可在此添加 } } } }
额外检查点
- 若使用旧版Sonar Gradle插件(<3.0),核心任务是
sonar而非sonarQube,需对应修改依赖项。 - 验证
jacocoTestReport和lint任务是否生成了对应路径的报告文件:- Jacoco报告:
${project.buildDir}/reports/jacoco/jacocoTestReport/jacocoTestReport.xml - Lint报告:
${project.buildDir}/reports/lint-results-debug.xml
- Jacoco报告:
- 全局
sonar扩展中的属性可保留,自定义任务仅覆盖本地需要修改的项即可,无需重复配置相同属性。
内容的提问来源于stack exchange,提问作者Sergio
相关产品推荐
相关产品推荐

