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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:25:23