Как разрешить ошибку "Не удалось разрешить: org.jetbrains.kotlin: kotlin-stdlib-jre7..." при создании в Android Studio

Я создал новый проект, установив флажок "включить котлин" в Android Studio 3, и во время компиляции я получаю сообщение об ошибке

"Failed to resolve: org.jetbrains.kotlin:kotlin-stdlib-jre7..."

Я убедился, что все плагины обновлены и что Android SDK установлен правильно.

Кто-нибудь знает, как решить эту ошибку?

Ответы

Ответ 1

kotlin-stdlib-jre[7/8] устарела некоторое время назад, и с тех пор была удалена. Примечание об устаревании сохранялось до версии 1.2.71, которая была последней версией, выпустившей эти артефакты. Официальное уведомление об устаревании можно найти здесь. Использование любой из устаревших версий (до ее удаления) также должно вызывать предупреждение (по крайней мере) в Android Studio и IntelliJ.

kotlin-stdlib-jdk7 используйте kotlin-stdlib-jdk7. Это та же зависимость, что и kotlin-stdlib-jre7 (кроме более новой), но она была переименована в kotlin-stdlib-jdk. kotlin-stdlib-jre больше не поддерживается как отдельная зависимость.

IntelliJ и Android Studio в настоящее время генерируют новые проекты, используя kotlin-stdlib-jre7; это скорее всего ошибка. Вероятно, они не обновили генераторы проекта. Поэтому вы должны вручную заменить зависимости рабочими, пока они не исправят это. Это зависит от плагина Kotlin. Обновите его, если вы этого не сделали. Я не проверял, был ли он исправлен или нет - если он есть, это только исправляет создание новых проектов.Для обновления из более старых версий остальная часть ответа по-прежнему применяется

Вы, естественно, должны сделать это, если у вас 1.2.71 или ниже, и вы обновляетесь до 1.3.0 или выше.

Это новые действительные зависимости от Kotlin 1.3.0:

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

Где $kotlinVersion - это либо переменная, содержащая версию, либо жестко запрограммированную версию (т. 1.3.0).


В качестве альтернативы вы можете использовать "обычный" stdlib (kotlin-stdlib) вместо версий, специфичных для JDK. Но вы должны изменить свою зависимость в любом случае, поэтому я рекомендую вам использовать kotlin-stdlib-jdk7, или, если вы планируете использовать Java 8, kotlin-stdlib-jdk8

Самые новые версии зависимостей также можно найти здесь. jdk7, jdk8 и stdlib, не зависящие от версии, следуют одним и тем же версиям (в соответствии с этим редактированием - это может измениться в будущем, но, скорее всего, будут уведомления до того, как произойдут эти изменения), так что, если вы проверите jdk8, jdk7 или обычная, все версии должны быть универсально доступны для всех артефактов stdlib.

Примечание для других систем сборки

То же самое реальное решение применимо и к другим системам сборки, но код другой. Поскольку существует множество систем сборки, я не собираюсь включать все из них, но дело в том, чтобы изменить артефакт с kotlin-stdlib-jre[num] на kotlin-stdlib-jdk[num] (без скобок, конечно). Или, как упоминалось ранее, kotlin-stdlib.

Независимо от системы сборки это основывается на доступе к Maven Central и аналогичным репозиториям. Если ваша система сборки не поддерживает это и/или нарушает соглашения и репозитории в стиле Maven, вам нужно будет найти, что работает для вашей системы сборки.

TL; DR:

org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version используйте org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version или org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version (в зависимости от того, какую версию вы изначально использовали).

Ответ 2

Удалите эту строку из build.gradle:

implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

Добавьте эту строку в build.gradle:

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

Обновите версию build.gradle на уровне проекта: kotlin version = '1.3.0'

Ответ 3

В build.gradle (Модуль: приложение) заменить

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

с

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

и в build.gradle (Модуль: проект) измените версию на

ext.kotlin_version = '1.3.0'