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'