我已经将Detekt添加到我的Gradle项目中。我的意图是仅按需调用detekt,因为它会产生很多误报。但是,detekt任务默认情况下处于 Activity 状态(并中断了构建)。如何避免这种依赖性?

我尝试了什么:我添加了一个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
    }
}

我觉得这7行代码实际上只是为了覆盖任务依赖性而已。我希望能得到Gradle的一般答案以及某些Detekt特定的方式。

最佳答案

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

task detect {
    doFirst {
        println 'detect'
    }
}

detect.onlyIf { project.hasProperty('runDetect') }

仅当detect条件为true时,才会执行onlyIf任务。
./gradlew detect -PrunDetect

请在这里查看详细信息https://docs.gradle.org/current/userguide/more_about_tasks.html#sec:skipping_tasks

09-05 08:08