web-dev-qa-db-ja.com

KotlinはJava 11をサポートしていますか?

Kotlin V1.2.70、Gradle V4.10.1およびJava 11.を使用しようとしています。gradleを使用してプロジェクトをコンパイルすると、「不明なJVMターゲットバージョン:11.サポートされているバージョン:1.6、1.8」というエラーが表示されます。

KotlinコンパイラはJava 11(Java 11 JVMと互換性のあるコードを生成します)をサポートしていますか?もしそうなら、gradleでそれを設定する方法は?

19
dharanikesav

ターゲットバージョンが1.6または1.8に設定されている場合、Kotlinコンパイラーによって生成されるバイトコードは、JVM 11と完全に互換性があります。

22
yole

Kotlinコンパイラは、Kotlin 1.3.30以降のターゲットとしてJVM 9、10、11、および12バイトコードバージョンをサポートしています( changelog )。

1.3.30より前は、JVM 1.6および1.8バイトコードバージョンのみがターゲットとしてサポートされていました。 1.2.70を使用したため、ターゲットとしてJVM 11バイトコードを指定すると、言及したエラーが発生しました。

2つの解決策があります。

  • JVMターゲットバイトコードバージョンとして1.8を指定します。 @yoleが答えで言ったように、これはJVM 11と完全に互換性があります。実際、 Kotlin 1.3.30の変更ログ で述べたように、新しいJVMターゲットバイトコードバージョンは現在、バイトコード最適化を追加しません1.8でサポートされていたものを超えているので、とにかく今のところ何の違いもありません。

  • Kotlin 1.3.30(またはそれ以降)にアップグレードすると、JVMバイトコードのターゲット値として11を保持できます。利点は、Kotlinコンパイラーの将来のバージョンで追加のバイトコード最適化が自動的に得られることです。

6
Malte Skoruppa