Gradle Projekt: java.lang.NoClassDefFoundError: kotlin/jvm/interne/Interna
Arbeite ich an einem Java-Projekt und in diesem Projekt habe ich meine ersten versuche mit Kotlin. Ich begann die Umwandlung einige Klassen zu Kotlin mit der JavaToKoltin Konverter in die Intellij Idea. Unter anderem meine benutzerdefinierte Ausnahmen werden nun umgewandelt, um Kotlin. Aber mit dieser exception handling funktioniert nicht mehr korrekt.
Wenn ich werfe eine meiner benutzerdefinierten Ausnahmen (z.B. MyCustomKotlinException.kt
) innerhalb der java-code ist, wird die Ausnahme nicht abgefangen wird (siehe code unten).
//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 ...
}
}
}
Also kann jemand mir erklären, warum die exception nicht fangen. MyCustomKotlinException
erbt von Kotlins RuntimeException
, das ist nur ein alias zu java.lang.RuntimeException
.
//MyCustomKotlinException.kt
package foo
class MyCustomKotlinException(err: String) : RuntimeException(err)
Update:
Ich teilte die werfen teilweise in 2 Zeilen (Beispiel Schöpfung und werfen) und festgestellt, dass das problem ist nicht das werfen. Der try-block ist Links nach der instanzerstellung. Ist irgendetwas falsch mit meinem Beispiel Erstellung dieser Kotlin Klasse?
Update2:
Hinzugefügt habe ich einen zweiten catch-block mit Throwable
und die folgenden Throwable gefangen ist.
java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
...
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
Update3:
Änderte den Titel zu korrigieren Fehler und örtlich festgelegtes problem mit dem hinzufügen von alle Projekt-Dateien in jar (siehe Antwort unten).
Hinzufügen der Kotlin-runtime-lib in gradle funktioniert bei mir nicht.
- Bitte geben Sie eine vollständige minimale reproduzierbare Beispiel zum Beispiel mit, dass der kotlin-source-code.
- ist das genug für Sie?
- Es muss genug sein, so dass die Menschen können repro der Ausgabe. Sieht aus wie jetzt.
- Ich kann nicht reproduzieren Sie das Problem mit dem code, den Sie zur Verfügung gestellt.
- Ja, Sie haben Recht. Ich habe gerade versucht mit diesem Beispiel-und es funktioniert. Aber die exception-Klasse sieht gleich aus, aber mit einem anderen Namen und auch das Beispiel Schöpfung, in dem try-catch ist die gleiche, also keine Ahnung, warum es funktioniert, nur für das Beispiel.
- Und auch die Instanz, die Schaffung einer anderen custom Kotlin-Klasse funktioniert einwandfrei, also scheint es ein problem mit der exception-Klasse.
- Verwandte: stackoverflow.com/questions/4871656/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinzufügen alle Projekt-Dateien in die jar-behoben das problem für mich. Fügte ich folgende Zeile in meine
build.gradle
Konfigurieren Sie Ihr Projekt mit kotlin.
Also in Android Studio:
klicken Sie auf Extras => kotlin => Konfigurieren von kotlin im Projekt
Dann im dialog überprüfen : Alle module mit kotlin-Dateien
und wählen Sie version
drücken Sie ok
Getan.
Bin ich dabei zu sagen, dass Sie versuchen zu laufen Kotlin-code, ohne die
kotlin-runtime
BibliothekPrüfen Sie, welches system Sie verwenden, und fügen Sie die erforderlichen jar-Datei. Sie können überprüfen, dass dies Ihr Problem ist, indem Sie Verpacken Sie Ihr Projekt in einem
.jar
Datei und es läuft mit der Laufzeit-Bibliothekbuild.gradle
(compile "org.jetbrains.kotlin:kotlin-runtime:$kotlin_version"
), aber nicht für mich arbeiten.kotlin-runtime
veraltet fürkotlin-stdlib
.Hatte das gleiche problem, mein Projekt kompilieren mit Ant in der Konsole. Ich habe edded kotlin-stdlib.jar in classpath und das problem ist verschwunden.
Hinzufügen der folgenden löste das Problem für mich:
Hier ist der Inhalt
libs/gradle-plugins/kotlin
:Den kompletten
gradle.build.kts
(offline-setup):In meinem Fall, ein
enableFeaturePreview
in den Einstellungen.gradle verursacht dieses Problem, wenn Sie auf Kotlin 1.3.