JVMターゲット1.8でビルドされたバイトコードを、JVMターゲット1.6でビルドされているバイトコードにインライン化することはできません。


486

IntelliJを介してサンプルCorDapp(https://github.com/corda/cordapp-example)を実行しようとすると、次のエラーが表示されます。

JVMターゲット1.8でビルドされたバイトコードを、JVMターゲット1.6でビルドされているバイトコードにインライン化することはできません。

IntelliJ設定を変更して、すべてのバイトコードが同じJVMターゲットでビルドされるようにするにはどうすればよいですか?


5
私は、このライブラリを追加することによってこの問題を解決することができたbuild.gradleの依存関係{コンパイル(「org.jetbrains.kotlin:kotlin-STDLIB-jdk8」)}
Munish Chandel

1
@MunishChandelそれでは不十分です。また、以下の答えが示唆することを実行する必要があります...
IgorGanapolsky

回答:


1034

app / build.gradle

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8.toString()
    }
}

GL

Java 8言語機能を使用する


31
これはチェックされたソリューションでなければなりません。
Phil

9
この日付とAndroid Studio v3.5の時点で、残りのすべてを試した後、これが機能する唯一のソリューションです。不思議なことに、設定> Kotlinコンパイラで同じ値を設定しても効果はありません。
user3399299

53
だけkotlinOptions { jvmTarget = "1.8" }で十分です。
ペッター、

2
動作し、答えは自明で簡潔に記述されています
Vikas Pandey

4
次に、「キャッシュを無効にして再起動する」
B-GangsteR

214

この問題は次のように修正できます。

  • IntelliJ設定を開く
  • 行くBuild, Execution, Deployment> Compiler> Kotlin Compiler しかし Other Settings > Kotlin compilerAndroidのメーカーの場合>3.4
  • 変更Target JVM version1.8
  • クリック Apply

6
この設定は既に1.8に固定されていますが、ブレークポイントをステップ実行すると、このエラーが表示されます。これは主に、ボールトクエリにヒットしたときに発生します。他に提案はありますか?このターゲットJVMビットでは完全に修正されていないようです。
アルサランハリド

38
あなたの上のプロジェクト構造、あなたはまた、変更を確認するTarget platformJVM 1.8あなたにKotlin下ファセットGeneralタブ。
Anyul Rivas

7
このエラーは、未解決の依存関係がある場合に発生する可能性があります。
programaths '14

5
私にとって、Kotlin Compiler設定は実際にはOther Settingsセクションに配置されました。
qwertyfinger

10
適用後に再起動しても不十分な場合→キャッシュを再起動して無効化します。
Bartek Lipinski

104

build.gradleで次のように構成する必要があります

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

14
または、Gradle Kotlin DSLの場合:tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }
breandan

これをkotlin-androidプラグインで動作させる方法はありますか?
ZeroDivide

それほど手間をかけずに動作します。私はそれをお勧めします
ミッチ

これはbuild.gradleにありましたが、どういうわけかIDEAがこの設定を上書きしました。Saeedからの回答が役に立ちました。
nils petersohn

これをアプリレベルのGradleのAndroid {}セクションに追加してください。
Parag Kadam、

80

私の場合、次のようにターゲットJVMバージョンを変更するだけです:ファイル>設定> Kotlinコンパイラ>ターゲットJVMバージョン> 1.8は役に立ちませんでした。ただし、コンパイル時エラーは解決されました。しかし、実行時に失敗しました。

それを機能させるには、アプリのbuild.gradleファイルにも以下を追加する必要がありました。

 android {
     // Other code here...
     kotlinOptions {
        jvmTarget = "1.8"
     }
 }

2
魅力的です。感謝
デイブoグレイディ

動作します!ありがとう
Waldmann

55

他のソリューションが機能しない場合(コンパイラ設定でJVMバージョンを変更してに追加jvmTargetするbuild.gradle)、.imlファイルが構成を強制しようとしているため、プロジェクト設定からターゲットプラットフォームを変更できます。

  • 開いた File > Project Structure
  • Facets下に行くProject Settings
    • 空の場合は、小さな+ボタンをクリックします
  • Kotlinモジュールをクリックします。
  • をに変更Target PlatformしますJVM 1.8Use project settingsオプションを確認することをお勧めします)

3
これまたはAndroid Studioの「ファセット」セクションが見つかりません... app app.imlを手動で編集する必要がありました。私はに設定<configuration version="3" platform="JVM 1.8" useProjectSettings="false">true、それが働いた。ただし、ファイルは元に戻り続けます!
Aphex 2018

1
@Aphex実際には「ファイル」>「プロジェクト構造」の下にあり、「プロジェクト設定」>「ファセット」の下に何もないので、「+」>「Kotlin」>プロジェクトを選択しました。それは私のためにそれをしました:)
ニコラ・ギローム

これは私にとってはうまくいきますが、build.gradle.ktsファイルに追加するたびに1.6に強制的に戻されます。
ルーMorda

これを設定してgradleファイルから取得する方法はありますか?これが正しく設定されていないことは、intellijのバグです。
Jilles van Gurp

35

私の場合、このコードapply plugin: 'kotlin-android'は下から上に移動するまで機能しませんでした。

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

kotlinOptions {jvmTarget = "1.8"} Didi the trick for me、thx
Didi

32

Android Studio 4.3.2では、以下の手順による追加は機能しません。

  1. IntelliJ設定を開く
  2. ビルド、実行、展開 > コンパイラ > Kotlinコンパイラに移動しますがその他の設定> Android Studioの場合はKotlinコンパイラ> 3.4
  3. ターゲットJVMバージョンを1.8に変更します
  4. 「適用」をクリックします

その理由は、Android StudioがモジュールレベルのGradleファイルに以下のコードを追加できないためです。手動で追加してください。

kotlinOptions {
    jvmTarget = "1.8"
}

アドオンについては、Android Studio検索でターゲットJVMバージョンを検索します。オプションに直接移動します。 ここに画像の説明を入力してください


手動で追加するだけで、うまくいきました。何らかの理由で、android studioは本当にバグが多く、すべてのキャッシュを削除してideを再起動しない限り、適用された変更は考慮されません。
Karan Sharma


26

2020年2月
android 3.4以降
[ファイル]-> [設定]-> [Kotlinコンパイラ]-> [ターゲットJVMバージョン]> [1.8]に設定し、[ファイル]-> [Gradleファイルとプロジェクトを同期]を選択する

か、build.gradle(module:app)に追加します。Androidのブロック:

kotlinOptions {
           jvmTarget = "1.8"
         }

私だけのための作品..「のGradleと同期プロジェクトファイル」
AkashさんBisariya

あなたはファイルを実行する必要があることを確認しました-> Gradleファイルでプロジェクトを同期してください、そしてそれは動作します
Irfandi D. Vendy

19

それがで書かれている通り使用して、Mavenの Kotlinのウェブサイトからのドキュメント:

あなた<kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>はあなたのpom.xmlのプロパティセクションに入れなければなりません


19

多くのソースセット/モジュールがある場合、それぞれに対して個別にjvmTargetを設定するのは面倒な場合があります。

次のように、それらすべてのjvmTargetを一度に設定できます。

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

このスニペットは、gradle.buildファイルの最上位で使用できます

Gradleファイルを変更した後Reimport All Gradle Imports。機能したかどうかを確認するには、Project StructureIntelliJを開いて、JVM 1.8すべてのKotlinモジュールに正しく割り当てられていることを確認します。次のようになります。

プロジェクトの構造

IntelliJで直接プラットフォームを変更することお勧めしません。プロジェクトを初めて複製する人はだれでも同じ問題に直面する可能性が高いからです。Gradleで正しく設定すると、IntelliJが最初から正しく動作するという利点があります。


16

私の場合、私はこれらの2つのステップに従ってこれを解決しました

1. Go to android studio preferences -> other settings -> kotlin compiler -> set Target JVM version = 1.8 
   if it doesn't work then go to the second option.

2. In your module-level build.gradle file add 
   compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }

回答ありがとうございます。2番目のステップを実行する必要がありました。それが必要な理由を説明できますか?
hushed_voice

この解決済みの問題について詳しく知ることができます[ github.com/mikepenz/Android-Iconics/issues/454]
Vikas Sharma

そのリンクは死んでいる
hushed_voice

12

私にとっての理由は、ビルドグラドルのこの構成が一部のモジュールにあり、一部にそれがなかったからです

android {  
...      
kotlinOptions {
        val options = this as KotlinJvmOptions
        options.jvmTarget = "1.8"
    }
...
android {

1
おかげで、これは私のために働いた唯一の解決策でした。私はkts buiildファイルを使用しています。
Krames

おかげで、これは私のために働いたソリューションでもあります。そして、このように宣言的です。 stackoverflow.com/a/57041765/3763032 kevinもこれを述べています。kotlingradleファイル.ktsのスマートキャストにより、直接利用できます
mochadwi

12

Kotlin言語(*.gradle.ktsファイル)を使用するGradleの場合は、次を追加します。

android {
    [...]
    kotlinOptions {
        this as KotlinJvmOptions
        jvmTarget = "1.8"
    }
}

にキャストthisする必要があるのはなぜですかKotlinJvmOptions。ブロックthis内の受信機はkotlinOptionsすでにありKotlinJvmOptionsませんか?それでも、キャストなしでは私には
うまくいき

1
@ 11m0、それはこの問題に関連していると思います:github.com/gradle/kotlin-dsl-samples/issues/1368
HDW

KotlinJvmOptionsが見つからない場合は、フルネーム「org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions」を使用してみてください。
HDW

4

ほとんどの場合、これで十分です:

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

integrationTestたとえば、カスタムのGradleタスクを宣言している場合は、次の構成compile<YourTaskName>Kotlinも追加します。

compileIntegrationTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

これはgradleファイルに追加することでも機能します-> compileOptions {sourceCompatibility = 1.8 targetCompatibility = 1.8} kotlinOptions {jvmTarget = "1.8"}
Sanket Patel

興味深いことに、Android以外のモジュールで機能するのはあなたのソリューションだけです!ありがとう!
Mohammad Omidvar

4

設定sourceCompatibility = JavaVersion.VERSION_1_8により、desugaringが有効になりますが、現時点では、Kotlinコンパイラが使用するすべてのJava 8機能をdesugarすることはできません。

ここに画像の説明を入力してください

修正- kotlinOptions.jvmTarget to JavaVersion.VERSION_1_8アプリモジュールGradleで設定すると、問題が修正されます。

Java 8言語機能を使用する:https : //developer.android.com/studio/write/java8-support

android {
  ...
  // Configure only for each module that uses Java 8
  // language features (either in its source code or
  // through dependencies).
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
  // For Kotlin projects
  kotlinOptions {
    jvmTarget = "1.8"
  }
}

3

ここでのすべての回答はgradleを使用していますが、私のような誰かがここで終わり、mavenの回答が必要な場合:

    <build>
        <sourceDirectory>src/main/kotlin</sourceDirectory>
        <testSourceDirectory>src/test/kotlin</testSourceDirectory>

        <plugins>
            <plugin>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-maven-plugin</artifactId>
                <version>${kotlin.version}</version>
                <executions>
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>test-compile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <jvmTarget>11</jvmTarget>
                </configuration>
            </plugin>
        </plugins>
    </build>

kotlin-jvmのjetbrainsアーキタイプからの変更は、jvmTargetを<configuration></configuration>指定することです。私の場合11


3

kotlinプラグインの依存関係を更新するまで、何も機能しませんでした。
これを試してください:
1. cahceを無効にして再起動します。
2.プロジェクトを同期します(少なくとも試行してください)
3. [ファイル] -> [ プロジェクト構造] -> [ 提案]を選択
します。4。Kotlinに関する更新がある場合は、更新します。
それが誰かを助けることを願っています。


最も簡単な修正
u84six

2

Kotlin拡張機能でVisual Studio Code **を使用している場合は、プラグイン管理Crtl + Shift + xに移動し、kotlinと入力して、[管理](小さな歯車)をクリックします>>拡張設定の構成

Kotlinで>>コンパイラ>> Jvm:Target-Javaバージョンを入力します。私の状況では1.8と入力しました

そして、再起動します:-)

** Linuxのvscodeまたは単に「コード」


2

私の場合、ファイル>設定> Kotlinコンパイラ>ターゲットJVMバージョン> 1.8


2

私は通常のJVM開発(Androidではない)にKotlinとGradleを使用していますが、これは私にとってはうまくいきましたbuild.gradle

allprojects {
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
        kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
    }
}

1

Kotlinプラグインをダウンロードしたと仮定してEclipseを使用する場合:

プロジェクトを右クリック->プロパティ-> Kotlinコンパイラ->プロジェクト固有の設定を有効化-> JVMターゲットバージョン "1.8"


1

Android Studioの最近のバージョンでは、Kotlin Target VMのバージョンを変更するだけでは機能しませんでした。

ファイル➞プロジェクト構造➞モジュール(app):「ソース互換性」と「ターゲット互換性」の両方を「1.8(Java 8)」に設定します。[OK]をクリックして、プロジェクトをGradleと同期します。


1

Androidプロジェクトの場合

Androidのアプリのbuild.gradle {}

android{
//other configs...
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

1

Kotlin Gradle DSLを使用して、これで問題が解決しました。これをbuild.gradle.ktsに追加しました。これはジョエルの答えに追加されます

val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()

1
これを置いたファイルの正確な場所を共有していただけますか?また、使用しているAndroidプラグインとGradleのバージョンは何ですか?
treesAreEverywhere

これはAndroidプロジェクトではありません。Gradle 6.4を実行しています。
Briantical

0

Eclipseユーザーのためのもう1つのヒント。他のユーザーから指摘されたjvmターゲット設定を再確認した後も、同じ問題が発生しました。これは、Kotlinランタイムライブラリがないために発生しました。たとえば、Spring Initializrを使用してプロジェクトを作成する場合、プロジェクトは自動的に追加されません。それを追加するには:right click on your project -> Build path -> Add libraries... -> User Library、そして単に追加org.jetbrains.kotlin.core.KOTLIN_CONTAINER

その後、gradleプロジェクトを更新してください(right click -> Gradle -> Refresh gradle project


0

Spring Boot / Kotlinプロジェクトでこのメッセージが表示された場合は、pom.xmlでプロパティ「kotlin.compiler.jvmTarget」を「1.8」に設定してください。

    <properties>
        <kotlin.version>1.3.70</kotlin.version>
        <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
    </properties>
    ...

0

私の場合、jvmTargetはすでにbuild.gradle次のようにファイルに設定されています。

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

しかし、私の問題はまだそこにありました。最後に、Preferences> Other Settings> Kotlin Compiler> Target JVM versionでTarget JVMバージョンを1.6から1.8に変更すると解決されます。添付画像を参照してください、

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.