在 Gradle 中禁用自动 Detekt 运行

Mic*_*fel 5 gradle kotlin detekt gradle-kotlin-dsl

我已将Detekt添加到我的 Gradle 项目中。我的意图是仅按需调用detekt,因为它会产生很多误报。但是,该detekt任务默认处于活动状态(并破坏构建)。我怎样才能避免这种依赖呢?

我尝试过的:我添加了一个有条件gradle.taskGraph.beforeTask设置的块enabled = false

gradle.taskGraph.beforeTask {
    val containsDetektTaskCall = gradle.startParameter.taskNames.contains("detekt")
    if (name.startsWith("detekt") && !containsDetektTaskCall) {
        logger.lifecycle("Skipping all 'detekt-plugin' tasks")
        enabled = false
    }
}
Run Code Online (Sandbox Code Playgroud)

我感觉这 7 行代码只是为了覆盖一个任务依赖,确实有点多了。我希望得到一个一般的 Gradle 答案以及一些特定于 Detekt 的方法。

Max*_*Max 4

有很多方法可以跳过任务。最简单的方法是为您的任务添加onlyIf条件。例如:

task detect {
    doFirst {
        println 'detect'
    }
}

detect.onlyIf { project.hasProperty('runDetect') }
Run Code Online (Sandbox Code Playgroud)

detect仅当条件为真时才会执行任务onlyIf

./gradlew detect -PrunDetect
Run Code Online (Sandbox Code Playgroud)

请查看此处了解详细信息https://docs.gradle.org/current/userguide/more_about_tasks.html#sec:skipping_tasks

  • 供参考:对于 Kotlin DSL,它是 `tasks.getByPath("detekt").onlyIf { project.hasProperty("runDetekt") }`。 (4认同)
  • 而且,更好的是,因为再添加一个命令行参数很尴尬:`tasks.getByPath("detekt").onlyIf { gradle.startParameter.taskNames.contains("detekt") }` (4认同)