Dagger 2:无法在Intellij Idea(Kotlin)中找到生成的类

问题描述 投票:1回答:2

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

有许多类似于这个的问题,但我无法使用其中任何一个来解决问题。

我的项目可以在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完成。

java apache-spark intellij-idea kotlin dagger-2
2个回答
3
投票

这看起来像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指令)放在同一个包中。


0
投票

对我来说,它看起来像一个IDE(Android Studio / IntelliJ)错误。

事实:

  • 生成的类存在于路径build/generated/source/kapt/main
  • 使用这些生成的类的代码实际上甚至很难,IDE用红色和Unresolved reference错误标记它

固定:

sourceSets {
    main.java.srcDirs += "$buildDir/generated/source/kapt/main"
}

如果你使用protobuf有类似的问题,生成的原型类不可见(再次Unresolved reference错误)

固定:

sourceSets {
    main {
        java {
            srcDirs += file("${protobuf.generatedFilesBaseDir}/main/java")
            srcDirs += file("${protobuf.generatedFilesBaseDir}/main/javalite")
            srcDirs += file("${protobuf.generatedFilesBaseDir}/main/grpc")
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.