简体   繁体   English

Kotlin IllegalStateException:在类路径中找不到资源:kotlin / .kotlin_string_table

[英]Kotlin IllegalStateException: Resource not found in classpath: kotlin/.kotlin_string_table

I'm trying to play around with Kotlin a bit in my Android app and am having trouble calling extension functions. 我试图在我的Android应用程序中与Kotlin一起玩,但无法调用扩展功能。 The app crashes immediately with the following stack trace: 应用程序立即崩溃并显示以下堆栈跟踪:

04-23 13:31:22.415  32606-32606/com.example.kotlin.test E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.kotlin.test, PID: 32606
    java.lang.ExceptionInInitializerError
            at org.jetbrains.kotlin.load.kotlin.reflect.RuntimeModuleData$Companion.create(RuntimeModuleData.kt:34)
            at kotlin.reflect.jvm.internal.InternalPackage$moduleByClassLoader$cff17278.getOrCreateModule(moduleByClassLoader.kt:54)
            at kotlin.reflect.jvm.internal.KClassImpl$descriptor$1.invoke(KClassImpl.kt:31)
            at kotlin.reflect.jvm.internal.KClassImpl$descriptor$1.invoke(KClassImpl.kt:26)
            at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.get(ReflectProperties.java:84)
            at kotlin.reflect.jvm.internal.KClassImpl.getDescriptor(KClassImpl.kt)
            at kotlin.reflect.jvm.internal.KClassImpl.getScope(KClassImpl.kt:43)
            at kotlin.reflect.jvm.internal.KClassImpl.getProperties(KClassImpl.kt:84)
            at kotlin.reflect.jvm.internal.KClassImpl.getProperties(KClassImpl.kt:72)
            at kotlin.reflect.ReflectPackage$KClassExtensions$6beb0f9b.getDeclaredProperties(KClassExtensions.kt:25)
            at kotlin.reflect.ReflectPackage.getDeclaredProperties(KClassExtensions.kt:1)
            at com.example.test.kotlin.api.model.DatabaseObject$$TImpl.deflate(DatabaseObject.kt:40)
            at com.example.test.kotlin.api.model.impl.Model.deflate(Model.kt)
            at com.example.test.kotlin.api.model.impl.Model.<init>(Model.kt:28)
            at com.example.test.kotlin.api.model.impl.TestModel.<init>(TestModel.kt:23)
            at com.example.app.TestModelIndexFragment.onCreate(TestModelIndexFragment.java:122)
            at android.support.v4.app.Fragment.performCreate(Fragment.java:1763)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:915)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499)
            at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:548)
            at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1220)
            at android.app.Activity.performStart(Activity.java:5949)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
            at android.app.ActivityThread.access$900(ActivityThread.java:147)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
     Caused by: java.lang.IllegalStateException: Built-in library initialization failed. Please ensure you have kotlin-runtime.jar in the classpath:     java.lang.IllegalStateException: Resource not found in classpath: kotlin/.kotlin_string_table
            at org.jetbrains.kotlin.builtins.KotlinBuiltIns.initialize(KotlinBuiltIns.java:75)
            at org.jetbrains.kotlin.builtins.KotlinBuiltIns.getInstance(KotlinBuiltIns.java:93)
            at org.jetbrains.kotlin.platform.JavaToKotlinClassMapBuilder.init(JavaToKotlinClassMapBuilder.java:35)
            at org.jetbrains.kotlin.platform.JavaToKotlinClassMap.<init>(JavaToKotlinClassMap.java:44)
            at org.jetbrains.kotlin.platform.JavaToKotlinClassMap.<clinit>(JavaToKotlinClassMap.java:35)
            at org.jetbrains.kotlin.load.kotlin.reflect.RuntimeModuleData$Companion.create(RuntimeModuleData.kt:34)
            at kotlin.reflect.jvm.internal.InternalPackage$moduleByClassLoader$cff17278.getOrCreateModule(moduleByClassLoader.kt:54)
            at kotlin.reflect.jvm.internal.KClassImpl$descriptor$1.invoke(KClassImpl.kt:31)
            at kotlin.reflect.jvm.internal.KClassImpl$descriptor$1.invoke(KClassImpl.kt:26)
            at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.get(ReflectProperties.java:84)
            at kotlin.reflect.jvm.internal.KClassImpl.getDescriptor(KClassImpl.kt)
            at kotlin.reflect.jvm.internal.KClassImpl.getScope(KClassImpl.kt:43)
            at kotlin.reflect.jvm.internal.KClassImpl.getProperties(KClassImpl.kt:84)
            at kotlin.reflect.jvm.internal.KClassImpl.getProperties(KClassImpl.kt:72)
            at kotlin.reflect.ReflectPackage$KClassExtensions$6beb0f9b.getDeclaredProperties(KClassExtensions.kt:25)
            at kotlin.reflect.ReflectPackage.getDeclaredProperties(KClassExtensions.kt:1)
            at com.example.test.kotlin.api.model.DatabaseObject$$TImpl.deflate(DatabaseObject.kt:40)
            at com.example.test.kotlin.api.model.impl.Model.deflate(Model.kt)
            at com.example.test.kotlin.api.model.impl.Model.<init>(Model.kt:28)
            at com.example.test.kotlin.api.model.impl.TestModel.<init>(TestModel.kt:23)
            at com.example.app.TestModelIndexFragment.onCreate(TestModelIndexFragment.java:122)
            at android.support.v4.app.Fragment.performCreate(Fragment.java:1763)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:915)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499)
            at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:548)
            at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1220)
            at android.app.Activity.performStart(Activity.java:5949)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
            at android.app.ActivityThread.access$900(ActivityThread.java:147)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
     Caused by: java.lang.IllegalStateException: Resource not found in classpath: kotlin/.kotlin_string_table
            at org.jetbrains.kotlin.builtins.BuiltinsPackageFragment.getStream(BuiltinsPackageFragment.kt:86)
            at org.jetbrains.kotlin.builtins.BuiltinsPackageFragment.<init>(BuiltinsPackageFragment.kt:55)
            at org.jetbrains.kotlin.builtins.KotlinBuiltIns.<init>(KotlinBuiltIns.java:114)
            at org.jetbrains.kotlin.builtins.KotlinBuiltIns.initialize(KotlinBuiltIns.java:70)
            at org.jetbrains.kotlin.builtins.KotlinBuiltIns.getInstance(KotlinBuiltIns.java:93)
            at org.jetbrains.kotlin.platform.JavaToKotlinClassMapBuilder.init(JavaToKotlinClassMapBuilder.java:35)
            at org.jetbrains.kotlin.platform.JavaToKotlinClassMap.<init>(JavaToKotlinClassMap.java:44)
            at org.jetbrains.kotlin.platform.JavaToKotlinClassMap.<clinit>(JavaToKotlinClassMap.java:35)
            at org.jetbrains.kotlin.load.kotlin.reflect.RuntimeModuleData$Companion.create(RuntimeModuleData.kt:34)
            at kotlin.reflect.jvm.internal.InternalPackage$moduleByClassLoader$cff17278.getOrCreateModule(moduleByClassLoader.kt:54)
            at kotlin.reflect.jvm.internal.KClassImpl$descriptor$1.invoke(KClassImpl.kt:31)
            at kotlin.reflect.jvm.internal.KClassImpl$descriptor$1.invoke(KClassImpl.kt:26)
            at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.get(ReflectProperties.java:84)
            at kotlin.reflect.jvm.internal.KClassImpl.getDescriptor(KClassImpl.kt)
            at kotlin.reflect.jvm.internal.KClassImpl.getScope(KClassImpl.kt:43)
            at kotlin.reflect.jvm.internal.KClassImpl.getProperties(KClassImpl.kt:84)
            at kotlin.reflect.jvm.internal.KClassImpl.getProperties(KClassImpl.kt:72)
            at kotlin.reflect.ReflectPackage$KClassExtensions$6beb0f9b.getDeclaredProperties(KClassExtensions.kt:25)
            at kotlin.reflect.ReflectPackage.getDeclaredProperties(KClassExtensions.kt:1)
            at com.example.test.kotlin.api.model.DatabaseObject$$TImpl.deflate(DatabaseObject.kt:40)
            at com.example.test.kotlin.api.model.impl.Model.deflate(Model.kt)
            at com.example.test.kotlin.api.model.impl.Model.<init>(Model.kt:28)
            at com.example.test.kotlin.api.model.impl.TestModel.<init>(TestModel.kt:23)
            at com.example.app.TestModelIndexFragment.onCreate(TestModelIndexFragment.java:122)
            at android.support.v4.app.Fragment.performCreate(Fragment.java:1763)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:915)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499)
            at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:548)
            at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1220)
            at android.app.Activity.performStart(Activity.java:5949)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
            at android.app.ActivityThread.access$900(ActivityThread.java:147)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)

My project is composed of two modules, test-kt and app , for the new Kotlin stuff and existing Java code respectively. 我的项目由两个模块test-ktapp ,分别用于新的Kotlin内容和现有的Java代码。 test-kt/build.gradle has the following: test-kt/build.gradle具有以下内容:

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'

android {
  compileSdkVersion 22
  buildToolsVersion "22.0.1"

  defaultConfig {
    minSdkVersion 9
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
  }
  buildTypes {
    release {
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }
  sourceSets {
    main.kotlin.srcDirs += 'src/main/kotlin'
    main.java.srcDirs += 'src/main/kotlin'
  }
}

dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  compile 'com.android.support:appcompat-v7:22.0.0'
  compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
  compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
}

buildscript {
  ext.kotlin_version = '0.11.91.2'
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    classpath 'com.android.tools.build:gradle:1.1.0'
  }
}

repositories {
  mavenCentral()
}

I've tried adding the Kotlin libs as dependencies within app as well with no luck. 我尝试将Kotlin库添加为app内的依赖项,但没有运气。 Is there something I'm missing? 有什么我想念的吗?

EDIT: Upon further investigation, it looks like this only happens whenever I use property references (such as ::x ) and not when I use extension methods. 编辑:经过进一步调查,看来这仅在我使用属性引用(例如::x )时发生,而在使用扩展方法时则不会发生。 I definitely have included kotlin-reflect ... any ideas? 我肯定包括了kotlin-reflect ...有什么想法吗?

I just encountered this as well when upgrading to Kotlin version 0.11.91.2. 升级到Kotlin版本0.11.91.2时,我也遇到了这个问题。 There is apparently an issue where the Android toolset does not pack a file prepended with a dot into resources. 显然存在一个问题,即Android工具集未将带有点号的文件打包到资源中。 (note that the file the exception references, .kotlin_string_table, is prepended with a dot). (请注意,该异常引用的文件.kotlin_string_table前面带有一个点)。

A fix has been written but not yet released. 已编写修复程序,但尚未发布。 You can try using the snapshot release of Kotlin in order to take advantage of it, or otherwise just wait for the next update. 您可以尝试使用Kotlin快照发行版来利用它,否则,请等待下一个更新。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM