Режимы совместимости
При миграции большой команды на новую версию, в какой-то момент может возникнуть «несогласованное состояние», когда некоторые разработчики уже обновились, а другие — нет. Чтобы предотвратить, чтобы первые писали и коммитили код, который другие не смогут скомпилировать, мы предоставляем следующие переключатели командной строки (также доступные в 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 зависимость вместо этого.
© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/compatibility-modes.html