使用“kotlin-kapt”插件,Android Studio不提供有关Dagger 2的具体错误

我用Dagger 2使用Kotlin。问题是,当我在执行Dagger的时候犯了错误(比如错过@Inject for class constraint),IDE并没有具体显示错误在哪里。 Insead编译器的错误总是一样的:

Execution failed for task ':app:kaptDebugKotlin'. Internal compiler error. See log for more details

有故意错误的类(注释@Inject):

 class LoginPresenter //@Inject constructor(private val request: LoginRequest) 

项目build.gradle文件:

 buildscript { ext.kotlin_version = '1.1.4-3' repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } 

模块build.gradle:

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { compileSdkVersion 26 buildToolsVersion "26.0.1" defaultConfig { applicationId "com.example.kravets_a.kotlinanddagger" minSdkVersion 16 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 { ... compile 'com.google.dagger:dagger:2.10' annotationProcessor 'com.google.dagger:dagger-compiler:2.10' kapt "com.google.dagger:dagger-compiler:2.10" compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" } repositories { mavenCentral() } 

选项1

使用apply plugin: 'kotlin-kapt' 。 当发生错误时,您可以在Android Studio中看到它=>在Gradle Console的右下角=>。

感谢David Medenjak的评论。

选项2

kapt { generateStubs = true }代替apply plugin: 'kotlin-kapt' kapt { generateStubs = true }

编译失败,结果如下:

[com.example.kravets_a.kotlinanddagger.logic.MainActivityComponent.inject(com.example.kotlinanddagger.MainActivity)] com.example.kotlinanddagger.logic.LoginPresenter不能提供没有@Inject构造函数或从@提供或@Produces – 注明的方法。

像这样的教程, 这个或那个说apply plugin: 'kotlin-kapt'可以用来代替kapt { generateStubs = true } 。 但在这种情况下,Android Studio不提供特定的编译错误。