try method excepciones example catch java exception exception-handling kotlin

method - Proyecto Gradle: java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics



try catch exception kotlin (5)

Agregar todos los archivos de proyecto al archivo jar solucionó el problema para mí. build.gradle la siguiente línea a mi 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) } } }

Estoy trabajando en un proyecto Java y dentro de este proyecto hice mi primer intento con Kotlin. Comencé a convertir algunas clases a Kotlin con el convertidor JavaToKoltin provisto en la Idea Intellij. Entre otras, mis excepciones personalizadas ahora se convierten a Kotlin. Pero con esto, el manejo de excepciones ya no funciona correctamente.
Si lanzo una de mis excepciones personalizadas (por ejemplo, MyCustomKotlinException.kt ) dentro del código java, la excepción no se detecta (consulte el código a continuación).

// 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 ... } } }

Entonces, ¿alguien puede explicarme por qué la excepción no es la captura? MyCustomKotlinException está heredando de Kotlins RuntimeException , que es solo un alias de java.lang.RuntimeException .

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

Actualizar:
Divido la parte de lanzamiento en 2 líneas (creación de instancia y lanzamiento) y encontré que el problema no es el lanzamiento. El bloque try se deja después de la creación de la instancia. ¿Hay algo mal con la creación de mi instancia de esta clase Kotlin?

Actualización2:
Agregué un segundo bloque de captura con Throwable y se captura el siguiente Throwable.

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

Update3:
Se modificó el título para corregir el error y se solucionó el problema al agregar todos los archivos de proyecto a la jarra (vea la respuesta a continuación) Agregar la biblioteca de ejecución de Kotlin a gradle no funciona para mí.


En mi caso, un enableFeaturePreview en settings.gradle causó este problema al migrar a Kotlin 1.3.


Necesitas configurar tu proyecto con kotlin. Así que en Android Studio:

  1. haga clic en Herramientas => kotlin => Configurar kotlin en el proyecto

  2. Luego en el cuadro de diálogo: Todos los módulos que contienen archivos kotlin.

  3. y seleccione la versión

  4. presiona OK

Hecho.


Tuvo el mismo problema, compilando mi proyecto con Ant en la consola. He editado kotlin-stdlib.jar en classpath y el problema se ha ido.


Voy a decir que estás intentando ejecutar el código Kotlin sin la biblioteca en kotlin-runtime Kotlin

Compruebe qué sistema está utilizando y agregue el archivo jar necesario. Puede verificar que este es su problema empaquetando su proyecto en un archivo .jar y ejecutándolo con la biblioteca de tiempo de ejecución