匕首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
指令)。