Cannot get property "kotlinOutputDir" on null object - Kotlin and Spock

I am trying to check classes Kotlinwith Spock Framework. When there were only Java classes in my project, everything worked fine. But after adding kotlin in the version 1.1.51to my project, the tests stopped working, and now I get this error:

Error:Execution failed for task ':app:compileDebugUnitTestGroovyWithGroovyc'.
> Cannot get property 'kotlinOutputDir' on null object

I am using Android Studio 3.0 Beta 7

Here are my project and module files build.gradle:

Project build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext.kotlin_version = '1.1.51'

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-beta7'
        classpath 'org.codehaus.groovy:groovy-android-gradle-plugin:1.2.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.google.gms:google-services:3.1.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Module build.gradle

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'groovyx.android'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.2"
    defaultConfig {
        applicationId "com.redione.debtscalc"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.google.firebase:firebase-auth:11.4.2'
    implementation 'com.google.firebase:firebase-database:11.4.2'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

    testImplementation 'org.mockito:mockito-core:2.10.0'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

    testImplementation 'org.codehaus.groovy:groovy:2.4.11:grooid'
    testImplementation('org.spockframework:spock-core:1.1-groovy-2.4') {
        exclude group: 'org.codehaus.groovy'
        exclude group: 'junit'
    }    
}


apply plugin: 'com.google.gms.google-services'
repositories {
    mavenCentral()
}
+4
source share
1 answer

Update

The Groovy Android Gradle plugin has released v2.0.0 compatible with the Android Gradle Plugin 3.0.0. Edit the root build.gradle:

classpath 'org.codehaus.groovy:groovy-android-gradle-plugin:2.0.0'

The original answer (which cannot be used!), I leave for historical purposes.

Original answer

: Groovy Android Gradle Plugin v2.0.0, .

( ) , . . Github.

app/build.gradle :

// Ugly workaround for incompatibility between Groovy Android Gradle Plugin 1.2.0 and Android Gradle Plugin 3.0.0
// Should be fixed with Groovy Android Gradle Plugin 1.3.0. https://github.com/groovy/groovy-android-gradle-plugin/pull/155
task copyFlavorDebugUnitTestKotlinClasses(type: CopyKotlinClasses)
class CopyKotlinClasses extends DefaultTask {

    def kotlinOutputDir = ["$project.rootDir/app/build/tmp/kotlin-classes/flavorDebugUnitTest"]

    @TaskAction
    def doNothing() {
    }
}

, "" (-) , .

+2

Source: https://habr.com/ru/post/1687445/


All Articles