Android多模块项目执行./gradlew detekt仅输出单模块结果的问题
Android Detekt 多模块检测结果不完整问题
问题描述
Android项目包含presentation、domain、data三个模块,使用Detekt进行代码检测:
- 执行根目录命令
./gradlew detekt时,仅输出data模块的检测结果 - 单独执行模块命令(如
./gradlew :domain:detekt或./gradlew :presentation:detekt)时,对应模块的检测结果正常显示 - 需求:执行根目录
detekt任务时展示所有模块的检测结果
现有配置
项目级 build.gradle.kts
buildscript { repositories { google() mavenCentral() } dependencies { classpath("com.android.tools.build:gradle:7.3.1") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${libs.versions.version.kotlin.get()}") classpath("com.google.dagger:hilt-android-gradle-plugin:${libs.versions.version.google.dagger.get()}") classpath("org.jetbrains.kotlin:kotlin-serialization:${libs.versions.version.kotlin.get()}") classpath("io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.19.0") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id("io.gitlab.arturbosch.detekt") version "1.19.0" } apply(plugin = "io.gitlab.arturbosch.detekt") tasks.register("clean", Delete::class) { delete(rootProject.buildDir) }
Presentation模块 build.gradle.kts
plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("kotlin-kapt") id("dagger.hilt.android.plugin") id("io.gitlab.arturbosch.detekt") }
Domain模块 build.gradle.kts
plugins { id("java-library") id("kotlin") id("io.gitlab.arturbosch.detekt") }
Data模块 build.gradle.kts
plugins { id("com.android.library") id("org.jetbrains.kotlin.android") id("kotlin-kapt") id("dagger.hilt.android.plugin") id("kotlinx-serialization") id("io.gitlab.arturbosch.detekt") }
解决方案
步骤1:修正根项目插件重复引入问题
根项目同时通过buildscript添加classpath、plugins块引入插件、apply应用插件,会导致配置冲突。修改根项目build.gradle.kts:
- 移除
buildscript.dependencies中的classpath("io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.19.0") - 移除
apply(plugin = "io.gitlab.arturbosch.detekt")
修改后的根项目配置片段:
buildscript { repositories { google() mavenCentral() } dependencies { classpath("com.android.tools.build:gradle:7.3.1") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${libs.versions.version.kotlin.get()}") classpath("com.google.dagger:hilt-android-gradle-plugin:${libs.versions.version.google.dagger.get()}") classpath("org.jetbrains.kotlin:kotlin-serialization:${libs.versions.version.kotlin.get()}") // 移除detekt的classpath配置 } } plugins { id("io.gitlab.arturbosch.detekt") version "1.19.0" } // 移除重复的apply语句 tasks.register("clean", Delete::class) { delete(rootProject.buildDir) }
步骤2:配置根detekt任务聚合所有子模块任务
在根项目build.gradle.kts中添加配置,让根detekt任务依赖所有子模块的detekt任务,确保执行根任务时触发所有模块的检测:
detekt { // 可选:配置通用规则、报告格式等 buildUponDefaultConfig = true allRules = false } // 让根detekt任务依赖所有子模块的detekt任务 tasks.detekt.configure { dependsOn(subprojects.mapNotNull { it.tasks.findByName("detekt") }) }
步骤3:验证配置
执行./gradlew detekt命令,此时会依次执行三个模块的detekt任务,并在控制台输出所有模块的检测结果。
内容的提问来源于stack exchange,提问作者ant2009
相关产品推荐
相关产品推荐

