web-dev-qa-db-ja.com

Gradleプロジェクト:Java.lang.NoClassDefFoundError:kotlin / jvm / internal / Intrinsics

私はJavaプロジェクトに取り組んでおり、このプロジェクト内でKotlinを初めて試しました。IntellijIdeaで提供されるJavaToKoltinコンバーターを使用して、一部のクラスをKotlinに変換し始めました。例外はKotlinに変換されるようになりましたが、これにより例外処理が正しく機能しなくなりました。
Javaコード内でカスタム例外の1つ(たとえばMyCustomKotlinException.kt)をスローした場合、例外はキャッチされません(以下のコードを参照)。

// 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)

更新:
スロー部分を2行に分割し(インスタンスの作成とスロー)、問題はスローではないことがわかりました。 tryブロックは、インスタンスの作成後に残ります。このKotlinクラスのインスタンス作成に問題はありませんか?

pdate2:
Throwableを含む2番目のcatchブロックを追加すると、次のThrowableがキャッチされます。

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

pdate3:
タイトルを変更してエラーを修正し、すべてのプロジェクトファイルをjarに追加する際の問題を修正しました(以下の回答を参照)。 Kotlinランタイムライブラリをgradleに追加しても機能しません。

26
FreshD

すべてのプロジェクトファイルをjarに追加すると、問題が解決しました。 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) } }
}
17
FreshD

Kotlinを使用してプロジェクトを構成する必要があります。だからAndroid Studio:

  1. [ツール] => [kotlin] => [kotlinをプロジェクトで構成]をクリックします。

  2. 次にダイアログチェックで:kotlinファイルを含むすべてのモジュール

  3. バージョンを選択します

  4. oKを押します

できた.

19
Suraj Vaishnav

kotlin-runtimeライブラリなしでKotlinコードを実行しようとしていると言います

使用しているシステムを確認し、必要なjarファイルを追加します。これが問題であることを確認するには、プロジェクトを.jarファイルにパッケージ化し、 runtime library で実行します

5
Pelocho

コンソールでAntを使用してプロジェクトをコンパイルすると、同じ問題が発生しました。 kotlin-stdlib.jarをクラスパスに追加しましたが、問題はなくなりました。

2

以下を追加することで問題が解決しました:

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")
}
1
Eng.Fouad

コトリンの「組み込み」を解決します

これらのライブラリをgradleファイルに追加

implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.41'
    implementation 'nl.dionsegijn:konfetti:1.1.2'
1
dileep krishnan

私の場合、Kotlin 1.3への移行時にsettings.gradleのenableFeaturePreviewが原因でこの問題が発生しました。

0
matfax