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:
haga clic en Herramientas => kotlin => Configurar kotlin en el proyecto
Luego en el cuadro de diálogo: Todos los módulos que contienen archivos kotlin.
y seleccione la versión
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