Spec-Zone.ru › Kotlin 1.7

Режимы совместимости

При миграции большой команды на новую версию может возникнуть «несовместимое состояние», когда некоторые разработчики уже обновились, а другие нет. Чтобы предотвратить ситуации, когда первые пишут и коммитят код, который другие не смогут скомпилировать, мы предоставляем следующие переключатели командной строки (также доступные в IDE и Gradle/Maven):

  • -language-version X.Y — режим совместимости для версии языка Kotlin X.Y, сообщает об ошибках для всех языковых функций, появившихся позже.

  • -api-version X.Y — режим совместимости для версии API Kotlin X.Y, сообщает об ошибках для всего кода, использующего новые API из стандартной библиотеки Kotlin (включая код, сгенерированный компилятором).

В настоящее время мы поддерживаем разработку для трёх предыдущих версий языка и API помимо последней стабильной.

Ниже OV означает «Старая версия», а NV — «Новая версия».

Предупреждения о бинарной совместимости

Если вы используете компилятор Kotlin NV и имеете стандартную библиотеку OV или библиотеку рефлексии OV в пути класса, это может указывать на неправильную конфигурацию проекта. Чтобы предотвратить непредвиденные проблемы во время компиляции или выполнения, мы рекомендуем обновить зависимости до NV или явно указать аргументы версии API/версии языка. В противном случае компилятор обнаруживает потенциальную проблему и выдает предупреждение.

Например, если OV = 1.0, а NV = 1.1, вы можете увидеть одно из следующих предупреждений:

  • Runtime JAR files in the classpath have the version 1.0, which is older than the API version 1.1. Consider using the runtime of version 1.1, or pass '-api-version 1.0' explicitly to restrict the available APIs to the runtime of version 1.0.

    Это означает, что вы используете компилятор Kotlin 1.1 с стандартной или библиотекой рефлексии версии 1.0. Это можно решить несколькими способами:

    • Если вы намерены использовать API из стандартной библиотеки 1.1 или языковые возможности, зависящие от этих API, необходимо обновить зависимость до версии 1.1.

    • Если вы хотите сохранить совместимость кода с стандартной библиотекой 1.0, вы можете передать -api-version 1.0.

    • Если вы только что обновились до Kotlin 1.1, но пока не можете использовать новые языковые возможности (например, потому что некоторые ваши коллеги еще не обновились), вы можете передать -language-version 1.0, что ограничит все API и языковые возможности до 1.0.

  • Runtime JAR files in the classpath should have the same version. These files were found in the classpath: kotlin-reflect.jar (version 1.0) kotlin-stdlib.jar (version 1.1) Consider providing an explicit dependency on kotlin-reflect 1.1 to prevent strange errors Some runtime JAR files in the classpath have an incompatible version. Consider removing them from the classpath

    Это означает, что у вас есть зависимости от библиотек разных версий, например, стандартная библиотека 1.1 и библиотека рефлексии 1.0. Чтобы предотвратить скрытые ошибки во время выполнения, рекомендуется использовать одинаковую версию всех библиотек Kotlin. В этом случае рассмотрите добавление явной зависимости от библиотеки рефлексии 1.1.

  • Some JAR files in the classpath have the Kotlin Runtime library bundled into them. This may cause difficult to debug problems if there's a different version of the Kotlin Runtime library in the classpath. Consider removing these libraries from the classpath

    Это означает, что в пути класса есть библиотека, которая не зависит от стандартной библиотеки Kotlin как от Gradle/Maven зависимости, но распространяется в том же артефакте (т.е. имеет её встроенной). Такая библиотека может вызывать проблемы, так как стандартные инструменты сборки не рассматривают её как экземпляр стандартной библиотеки Kotlin, поэтому не подчиняются механизмам разрешения зависимостей по версиям, и у вас могут появиться несколько версий одной и той же библиотеки в пути класса. Обратитесь к авторам такой библиотеки и предложите использовать зависимость Gradle/Maven вместо этого.

Последнее изменение: 15 декабря 2021 г.
Руководство по совместимости для Kotlin 1.3 Что такое кроссплатформенная разработка мобильных приложений?

© 2010–2022 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/compatibility-modes.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API