Spec-Zone.ru › Kotlin 1.6

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

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

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

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

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

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

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

Если вы используете компилятор Kotlin NV и у вас в classpath стандартная библиотека 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 из Standard Library 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

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

Последнее изменение: 07 апреля 2022
Руководство по совместимости для 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