使用“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不提供特定的编译错误。