Android库,Kotlin和Dagger2

我正在构建一个包含两个模块的应用程序:核心模块,即Android库(com.android.library)和应用程序模块(com.android.application)。

将Java文件转换为Kotlin后,该项目不编译,给我一个错误,没有找到生成的Dagger 2文件(未解决的参考)。 但是那些目前正在生成的文件是:

…核心\编译\生成的\源\ kapt \ {释放我的\核心\命名空间} \ DaggerBaseComponent.java

我错过了什么?

build.gradle(核心模块)

apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' ... android { ... sourceSets { main.java.srcDirs += 'src/main/kotlin' } } dependencies { ... // Dagger. kapt "com.google.dagger:dagger-compiler:2.10" compile 'com.google.dagger:dagger:2.10' provided 'javax.annotation:jsr250-api:1.0' // Kotlin compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } 

build.gradle(应用程序模块)

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' ... android { sourceSets { main.java.srcDirs += 'src/main/kotlin' } } dependencies { ... // Dagger. kapt "com.google.dagger:dagger-compiler:2.10" compile 'com.google.dagger:dagger:2.10' provided 'javax.annotation:jsr250-api:1.0' // Kotlin compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } 

build.gradle(Project)

 buildscript { ext.kotlin_version = '1.1.2-3' ... dependencies { classpath 'com.android.tools.build:gradle:2.3.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } 

ApplicationContext.kt(我的核心模块)

 class ApplicationContext : Application() { var baseComponent: BaseComponent? = null private set override fun onCreate() { super.onCreate() initializeInjector() } private fun initializeInjector() { // DaggerBaseComponent is and unresolved reference baseComponent = DaggerBaseComponent.builder() .appModule(AppModule(this)) .endpointModule(EndpointModule()) .build() } companion object { operator fun get(context: Context): ApplicationContext { return context.applicationContext as ApplicationContext } } } 

问题是Gradle并没有通过kapt找到Dagger生成的文件,所以我通过将src/main/kapt添加到我的Core模块(lib)上的sourceSets配置来解决问题:

build.gradle(核心模块)

 android { ... sourceSets { main.java.srcDirs += ['src/main/kotlin', 'src/main/kapt'] } } 

之后,核心模块开始寻找他们的Dagger 2生成的文件。