Поддерживает ли Kotlin Java 11?

Я пытаюсь использовать Kotlin V1.2.70, Gradle V4.10.1 и Java 11. При компиляции проекта с использованием gradle возникает ошибка с сообщением "Неизвестная версия JVM Target: 11. Поддерживаемые версии: 1.6, 1.8".

Компилятор Kotlin поддерживает Java 11 (создает код, совместимый с JVM Java 11)? Если да, то как настроить это с помощью градиента?

Ответы

Ответ 1

Байт-код, сгенерированный компилятором Kotlin, когда целевая версия установлена на 1.6 или 1.8, полностью совместима с JVM 11.

Ответ 2

Компилятор Kotlin поддерживает версии байт-кода JVM 9, 10, 11 и 12 в качестве целевого с Kotlin 1.3.30 (changelog).

До 1.3.30 в качестве целей поддерживались только версии байт-кода JVM 1.6 и 1.8. Поскольку вы использовали 1.2.70, указание байт-кода JVM 11 в качестве цели привело к указанной вами ошибке.

Есть два решения:

  • Укажите 1.8 в качестве целевой версии байт-кода JVM. Как сказал @yole в своем ответе, это полностью совместимо с JVM 11. На самом деле, как уже упоминалось в журнале изменений Kotlin 1.3.30, более новые целевые версии байт-кода JVM в настоящее время не добавляют никаких оптимизаций байт-кода, кроме тех, которые поддерживаются в 1.8, так что на самом деле это пока не имеет никакого значения.

  • Обновитесь до Kotlin 1.3.30 (или новее), тогда вы можете оставить 11 в качестве целевого значения байт-кода JVM. Преимущество заключается в том, что вы автоматически воспользуетесь дополнительной оптимизацией байт-кода в будущих версиях компилятора Kotlin.