Search code examples
gradleandroid-gradle-plugindetekt

Detekt task fails only if ran without check task


I'm migrating detekt from 1.0.0.RC7-2 to the 1.0.1 and changing to use the new plugin syntax. I managed to make it work, but only when the full check task is executed.

If only the detekt task is executed then an error is shown.

The detekt task is failing with the following error:

Task :detekt FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':detekt'.
Could not resolve all files for configuration ':detekt'.
Cannot resolve external dependency io.gitlab.arturbosch.detekt:detekt-cli:1.0.1 because no repositories are defined.
Required by:
     project :

detekt.gradle

apply plugin: 'io.gitlab.arturbosch.detekt'

detekt {
    config = files("$rootDir/detekt/detekt-ruleset.yml")
    filters = ".*build.*,.*/resources/.*,.*/tmp/.*"
    input = files("src/main/java", "src/test/java")
    reports {
        html.enabled = true
        xml.enabled = false
        txt.enabled = false
    }
}

build.gradle (project):

buildscript {
    ext.kotlin_version = '1.3.50'
    repositories {
        jcenter()
        google()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.0.1"
    }
}

plugins {
     id "io.gitlab.arturbosch.detekt" version "1.0.1"
}

build.gradle (module):

repositories {
    jcenter()
    google()
}

apply from: "$rootDir/detekt/detekt.gradle"

Solution

  • I managed to make it work by creating a task for Detekt and not using the plugin:

    detekt.gradle

    configurations {
        detekt
     }
    
    dependencies {
        detekt "io.gitlab.arturbosch.detekt:detekt-cli:1.0.1"
    }
    
    task detekt(type: JavaExec) {
        main = "io.gitlab.arturbosch.detekt.cli.Main"
        classpath = configurations.detekt
        def input = "$rootDir"
        def config = "$rootDir/detekt/detekt-ruleset.yml"
        def exclude = ".*/resources/.*,.*/build/.*"
        def report = "html:${project.buildDir}/reports/detekt.html"
        def params = ['-i', input, '-c', config, '-ex', exclude, '-r', report]
        args(params)
    }
    
    check.dependsOn detekt  
    

    build.gradle (project)

    buildscript {
        ext.kotlin_version = '1.3.50'
        repositories {
            jcenter()
            google()
        }
    
        dependencies {
            classpath 'com.android.tools.build:gradle:3.4.2'
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
            classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.0.1"
        }
    }