Gradle Проект: java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
Я работаю над проектом Java, и в рамках этого проекта я сделал первую попытку с Kotlin. Я начал конвертировать некоторые классы в Kotlin с конвертером JavaToKoltin, представленным в Intellij Idea. В частности, мои пользовательские исключения теперь превращаются в Котлин. Но с этим обработка исключений больше не работает.
Если я выброшу одно из моих пользовательских исключений (например, MyCustomKotlinException.kt
) в java-код, исключение не будет найдено (см. Код ниже).
// 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 ...
}
}
}
Так может кто-нибудь объяснить мне, почему исключение не поймает. MyCustomKotlinException
наследуется от Kotlins RuntimeException
, который является просто псевдонимом java.lang.RuntimeException
.
// MyCustomKotlinException.kt
package foo
class MyCustomKotlinException(err: String) : RuntimeException(err)
Update:
Я разбил часть броска на 2 строки (создание экземпляра и метание) и обнаружил, что проблема заключается не в метании. Блок try остается после создания экземпляра. Что-то не так с моим созданием экземпляра этого класса Kotlin?
Update2:
Я добавил второй блок catch с Throwable
и поймал следующий Throwable.
java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
...
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
Update3:
Изменен заголовок для исправления ошибок и исправлена проблема с добавлением всех файлов проекта в jar (см. Ответ ниже).
Добавление библиотеки времени выполнения Kotlin в gradle не работает для меня.
Ответы
Ответ 1
Добавление всех файлов проекта в банку устраняет проблему для меня. Я добавил следующую строку в мой build.gradle
jar {
manifest {
attributes ...
}
// This line of code recursively collects and copies all of a project 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) } }
}
Ответ 2
Вам нужно настроить свой проект с помощью kotlin.
Итак, в Android Studio:
-
нажмите Tools = > kotlin = > Настроить kotlin в проекте
-
Затем в диалоговом окне: Все модули, содержащие файлы kotlin
-
и выберите версию
-
нажмите ok
Готово.
Ответ 3
Я собираюсь сказать, что вы пытаетесь запустить код Kotlin без библиотеки kotlin-runtime
Проверьте, какую систему вы используете, и добавьте необходимый файл jar. Вы можете убедиться, что это ваша проблема, упаковав проект в файл .jar
и запустив его с помощью библиотеки времени выполнения
Ответ 4
Имел ту же проблему, компилируя мой проект с помощью Ant в консоли. Я добавил kotlin-stdlib.jar в classpath, и проблема ушла.
Ответ 5
Добавление следующего решило проблему для меня:
dependencies {
"kotlinCompilerClasspath"(fileTree("libs/gradle-plugins/kotlin"))
}
Вот содержимое libs/gradle-plugins/kotlin
:
annotations-13.0.jar
commons-codec-1.9.jar
commons-logging-1.2.jar
gradle-download-task-3.4.3.jar
gson-2.8.5.jar
httpclient-4.5.3.jar
httpcore-4.4.6.jar
kotlin-android-extensions-1.3.40.jar
kotlin-annotation-processing-gradle-1.3.40.jar
kotlin-build-common-1.3.40.jar
kotlin-compiler-1.3.40.jar
kotlin-compiler-embeddable-1.3.40.jar
kotlin-compiler-runner-1.3.40.jar
kotlin-daemon-client-1.3.40.jar
kotlin-gradle-plugin-1.3.40.jar
kotlin-gradle-plugin-api-1.3.40.jar
kotlin-gradle-plugin-model-1.3.40.jar
kotlin-reflect-1.3.40.jar
kotlin-runtime-1.2.71.jar
kotlin-script-runtime-1.3.40.jar
kotlin-scripting-common-1.3.40.jar
kotlin-scripting-compiler-embeddable-1.3.40.jar
kotlin-scripting-compiler-impl-embeddable-1.3.40.ja
kotlin-scripting-jvm-1.3.40.jar
kotlin-stdlib-1.3.40.jar
kotlin-stdlib-common-1.3.40.jar
kotlin-stdlib-jdk7-1.3.40.jar
kotlin-stdlib-jdk8-1.3.40.jar
kotlinx-coroutines-core-1.1.1.jar
org.jetbrains.kotlin.jvm.gradle.plugin-1.3.40.jar
trove4j-1.0.20181211.jar
Полный gradle.build.kts
(автономная настройка):
buildscript {
dependencies {
classpath(fileTree("libs/gradle-plugins/kotlin"))
}
}
plugins {
java
'java-library'
}
apply(plugin = "kotlin")
version = "2019.06.1"
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
kotlinOptions.jvmTarget = "12"
}
repositories {
flatDir {
dirs("libs/compile")
dirs("libs/provided")
}
}
dependencies {
"kotlinCompilerClasspath"(fileTree("libs/gradle-plugins/kotlin"))
compileOnly(":javaee-api-8.0")
api(":kotlin-stdlib-common-1.3.40")
api(":kotlin-stdlib-1.3.40")
api(":kotlin-stdlib-jdk7-1.3.40")
api(":kotlin-stdlib-jdk8-1.3.40")
api(":gson-2.8.5")
}
Ответ 6
В моем случае, enableFeaturePreview
в settings.gradle вызвал эту проблему при переходе на Kotlin 1.3.
Ответ 7
**Simple Solution**
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.41'
implementation 'nl.dionsegijn:konfetti:1.1.2'