Gradle项目:java.lang.NoClassDefFoundError:kotlin / jvm / internal / Intrinsics

我正在开发一个Java项目,在这个项目中,我第一次尝试了Kotlin。 我开始使用Intellij Idea中提供的JavaToKoltin转换器将一些类转换为Kotlin。 其中我的自定义例外现在转换为Kotlin。 但是,这个exception处理不再正确工作了。
如果我在java代码中抛出一个自定义exception(例如MyCustomKotlinException.kt ),那么这个exception不会被捕获(见下面的代码)。

 // Example.java package foo import java.util.*; import java.lang.*; import java.io.*; import foo.MyCustomKotlinException; class Example { public static void main (String[] args) { try { // Do some stuff // if Error MyCustomKotlinException e = new MyCustomKotlinException("Error Message"); throw e; } catch (MyCustomKotlinException e) { // <-- THIS PART IS NEVER REACHED // Handle Exception } catch (Throwable e) { e.printStackTrace(); <-- This is catched } finally { // Finally ... } } } 

那么有谁能向我解释为什么这个例外是不可捉摸的。 MyCustomKotlinExceptioninheritance自Kotlins RuntimeException ,它只是java.lang.RuntimeException的别名。

 // MyCustomKotlinException.kt package foo class MyCustomKotlinException(err: String) : RuntimeException(err) 

更新:
我把投掷部分分成2行(实例创建和投掷),发现问题不是投掷。 创建实例后,将留下try块。 这个Kotlin类的实例创建有什么问题吗?

UPDATE2:
我用Throwable添加了第二个catch块,下面的Throwable被捕获。

 java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics ... Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics 

UPDATE3:
将标题更改为更正错误,并修复了将所有项目文件添加到jar的问题(请参阅下面的答案)。 将Kotlin运行时库添加到Gradle中对我来说不起作用。

将所有项目文件添加到jar中解决了我的问题。 我添加了以下行到我的build.gradle

 jar { manifest { attributes ... } // This line of code recursively collects and copies all of a project's files // and adds them to the JAR itself. One can extend this task, to skip certain // files or particular types at will from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } } 

您需要使用kotlin配置您的项目。 所以在Android Studio中:

  1. 点击工具=> kotlin =>在项目中配置kotlin

  2. 然后在对话框中检查:包含kotlin文件的所有模块

  3. 并选择版本

  4. 按下确定

完成。

我要说的是,你正在尝试运行没有kotlin-runtime库的Kotlin代码

检查您正在使用的系统并添加必要的jar文件。 您可以通过将项目打包到.jar文件并使用运行时库运行它来validation这是您的问题

有同样的问题,在控制台中用Ant编译我的项目。 我已经把kotlin-stdlib.jar编译成classpath,问题已经解决了。