2017-10-17 123 views
1

我試圖編寫一個應用程序來理解spark和dagger 2.但無法使用生成的匕首文件。匕首2:無法在Intellij Idea(Kotlin)中找到生成的類

這個問題有很多類似的問題,但我無法用這些問題來解決問題。

我的項目可以在GitHub上here

的的build.gradle文件看起來可以找到這樣

... 
apply plugin: 'kotlin-kapt' 
dependencies { 
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version" 
    compile "com.sparkjava:spark-kotlin:$spark_kotlin_version" 
    compile "org.slf4j:slf4j-log4j12:$slf4j_version" 
    compile "com.google.dagger:dagger:$dagger_version" 
    kapt "com.google.dagger:dagger-compiler:$dagger_version" 

    testCompile group: 'junit', name: 'junit', version: '4.12' 
} 
.... 

這是SparkSetup.kt類,我試圖注入。模塊和組件對於本存在於co.pissarra.util.dagger

SetupModule.kt內容看起來像這樣

@Module 
class SetUpModule { 
    @Provides 
    @Singleton 
    fun provideSparkSetup() : SparkSetup { 
     return SparkSetup() 
    } 
} 

這是AppComponent.kt

@Singleton 
@Component(modules = arrayOf(SetUpModule::class)) 
interface AppComponent { 
    fun sparkSetup() : SparkSetup 
} 

在理想情況下應該有一個類由名稱DaggerAppComponent ,它實際上存在於構建目錄(生成和類)中。但是這隻有在項目中的任何地方都沒有使用DaggerAppComponent時纔有效。如果我嘗試使用這個,intellij的想法給出了錯誤,Unresolved reference: DaggerAppComponent和該項目也無法建立。

我想更改文件ContainerRunner.kt而不是直接調用SparkSetup().init(),我希望通過DI完成。

+1

我試過用匕首的想法。生成的可能是在生成文件夾中。您必須將其添加到您的Gradle文件中的源代碼集。 – Joshua

回答

2

這看起來像KT-17923。 請將您的Kotlin IDE插件版本更新至1.1.60或1.2-Beta。

此外,作爲變通,你可以手動指定生成的目錄:

apply plugin: 'idea' 
idea { 
    module { 
     sourceDirs += file('build/generated/source/kapt/main') 
     generatedSourceDirs += file('build/generated/source/kapt/main') 
    } 
} 

請注意,您需要添加以下內容到build.gradle後重新導入項目。

唯一讓我覺得奇怪的是,在構建過程中錯誤也會重現。請檢查DaggerAppComponent是否與引用它的類相同(或者有import指令)。