无法获得null对象上的属性'kotlinOutputDir' – Kotlin和Spock

我想用Spock Framework来测试Kotlin类。 当我的项目中只有Java类时,一切正常。 但是,在版本1.1.51添加kotlin到我的项目后,测试stoped工作,现在我收到这样的错误:

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

我正在使用Android Studio 3.0 Beta 7

这里是我的项目和模块build.gradle文件:

项目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 } 

模块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() } 

简短的回答是,这个问题应该很快就会被解决,Groovy Android Gradle Plugin v1.3.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() { } } 

请注意,您必须用您的项目的实际风味替换“风味”,或者如果您不使用产品风味,请将其删除。