匕首2:无法在Intellij Idea(Kotlin)中find生成的类

我试图写一个应用程序来理解火花和匕首2.但无法使用生成的匕首文件。

这个问题有很多类似的问题,但是我不能用这些问题来解决问题。

我的项目可以在这里findgithub

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完成。

这看起来像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指令)。