我试图写一个应用程序来理解火花和匕首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完成。
这看起来像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
指令)放在同一个包中。
对我来说,它看起来像一个IDE(Android Studio / IntelliJ)错误。
事实:
build/generated/source/kapt/main
中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")
}
}
}