如何对Gradle 4构建的Android项目执行Sonar代码分析
Gradle 4 + Sonar 9 Java版本冲突解决方案
核心思路
不同任务使用对应兼容的Java版本拆分执行,避免版本绑定冲突
方案1:CI任务拆分执行(无代码/配置改动,优先推荐)
- 第一步:在CI流程中先配置Java 8环境,执行完整的Gradle构建任务,包括编译、单元测试、覆盖率生成、Android lint扫描等所有Sonar分析依赖的前置任务,生成所有必要产物。
- 第二步:新增
Java Tool Installer任务切换环境到Java 11,单独执行Sonar扫描任务,执行命令添加跳过编译参数:./gradlew sonarqube -x compileJava -x compileTestJava -x test,直接复用第一步生成的产物执行分析,不会触发Gradle的编译逻辑,避开Gradle 4和Java 11的兼容问题。
方案2:小版本升级Gradle(改动量极小)
Gradle 4.x分支的最终版本4.10.3已兼容Java 11,可直接将项目的Gradle版本升级到4.10.3,不需要修改现有构建配置,即可统一使用Java 11环境执行所有构建和Sonar扫描任务。
方案3:使用独立Sonar Scanner CLI(完全解耦Gradle版本)
不使用Gradle的Sonar插件,单独安装Sonar Scanner CLI工具:
- 依旧用Java 8环境执行完所有Gradle构建任务生成所需产物
- 切换到Java 11环境运行Sonar Scanner CLI,在配置中指定项目key、代码路径、构建产物路径、各类报告路径即可完成扫描,全程不依赖Gradle运行环境,彻底规避版本冲突。
注意:所有方案都需要确保Sonar任务执行时能读取到第一步生成的class文件、测试报告、覆盖率报告等产物,否则会出现分析结果缺失的问题。
内容的提问来源于stack exchange,提问作者dna
相关产品推荐
相关产品推荐

