Dagger and Kotlin. Dagger doesn't generate component classes

蹲街弑〆低调 提交于 2019-12-03 00:58:55

You need to have the kapt processor in build.gradle:

kapt {
    generateStubs = true
}

dependencies {
    ...
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile 'com.google.dagger:dagger:2.0.2'
    kapt 'com.google.dagger:dagger-compiler:2.0.2'
    ...
}

This extension will generate the code for dagger.

Additionally, for newer gradle versions, you can also apply the plugin in your build.gradle:

apply plugin: 'kotlin-kapt'

dependencies {
    ...
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile 'com.google.dagger:dagger:2.0.2'
    kapt 'com.google.dagger:dagger-compiler:2.0.2'
    ...
}

You can check this project for reference

I don't know when this change happened, but on 1.1.2 of the Kotlin gradle plugin you replace this (in your module's build.gradle):

kapt {
    generateStubs = true
}

with this:

apply plugin: 'kotlin-kapt'

and then make sure to replace dependencies that use annotationProcessor with kapt.

For example, the old way would be to use:

annotationProcessor (
    'some.library:one:1.0'
    ...
    'some.library.n:n.0'
)

and now you use:

kapt (
    'some.library:one:1.0'
    ...
    'some.library.n:n.0'
)

UPDATE FOR KOTLIN 1.1.4

generateStubs does not work anymore. Feel free to make a build with the latest Kotlin and it would tell you in the Messages section of Android Studio that it is not necessary anymore. Here's an up-to-date list of dependencies for Dagger2 for Android and Kotlin

apply plugin: 'kotlin-kapt'

//...
// Other Gradle stuff
//...

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:1.1.4-3"

    compile 'com.google.dagger:dagger-android:2.12'
    kapt 'com.google.dagger:dagger-android-processor:2.12'
    compileOnly 'com.google.dagger:dagger:2.12'
    kapt 'com.google.dagger:dagger-compiler:2.12'
}

This issue can be fixed with the bellow change which is different from original answer

Following will also work well to fix this issue

with plugins

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'

and dependencies

implementation "com.google.dagger:dagger:$dagger_version"
implementation "com.google.dagger:dagger-android:$dagger_version"
implementation "com.google.dagger:dagger-android-support:$dagger_version" 
kapt "com.google.dagger:dagger-compiler:$dagger_version"
kapt "com.google.dagger:dagger-android-processor:$dagger_version"

For reference check out this Gist

If u have problem withe DaggerComponent, You should add

apply plugin: 'kotlin-kapt'

kapt {
    generateStubs = true
}

to build.gradleit will generate kotlin code for dagger 2 otherwise project will only build on Rebuild

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!