Android Studio показывает предупреждение о зависимости Kotlin после второй сборки
Я только что включил Kotlin в своем проекте Android и наткнулся на предупреждение. После второй сборки (Build -> Rebuild Project) это предупреждение отображается под сообщениями:
Warning:Runtime JAR files in the classpath should have the same version. These files were found in the classpath:
~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.2.10/85fe1811f3e586d0cc53aba1394d8089f1862215/kotlin-stdlib-jdk8-1.2.10.jar (version 1.2)
~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-reflect/1.2.10/19bc012f8c4cd6b705bd6512263777cc19bcf259/kotlin-reflect-1.2.10.jar (version 1.2)
/Applications/Android Studio.app/Contents/gradle/m2repository/org/jetbrains/kotlin/kotlin-stdlib-jre7/1.1.51/kotlin-stdlib-jre7-1.1.51.jar (version 1.1)
~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.2.10/cfe8b616b3bf0811ef70863c86b745a2e767a66e/kotlin-stdlib-jdk7-1.2.10.jar (version 1.2)
~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.2.10/b9bf650516989595a5390e5a54181e16347208ac/kotlin-stdlib-1.2.10.jar (version 1.2)
Похоже, вторая сборка включает в себя устаревшие kotlin-stdlib-jre7-1.1.51.jar
из кеша После чистой сборки (Build -> Clean Project) предупреждение исчезло, и следующий проект перестроил его снова.
Я использую Android Studio 3.0.1 и явно включаю зависимости Kotlin в версию:
build.gradle
buildscript {
ext {
// shared build properties
kotlin_version = '1.2.10'
buildToolsVersion = '27.0.2'
minSdkVersion = 15
targetSdkVersion = 27
compileSdkVersion = 27
}
repositories {
jcenter()
google()
}
dependencies {
classpath "com.android.tools.build:gradle:3.0.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlin_version}"
}
}
Приложение /build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlin_version}"
implementation "org.jetbrains.kotlin:kotlin-reflect:${kotlin_version}"
[...]
}
Также на наших сборках travis показывается предупреждение. Таким образом, это не только проблема с моей локальной настройкой. Даже если это всего лишь предупреждение, я не чувствую себя комфортно, выпуская apk, который содержит конфликтующие версии.
1 ответ
Резюме
Вы уже исправили это, обновляя свои зависимости, но я отвечу здесь, чтобы связать связанный вопрос.
Вы правильно настроили зависимости вашего проекта и обновили плагин Kotlin до 1.2.
Обычно этого достаточно, как здесь, но зависимости stdlib-jre были изменены на jdk в Kotlin 1.2.
Но ваш проект зависел от Realm версии 4.3.1, и они исправили это в версии 4.3.2.
Вы можете найти зависимость, вызывающую проблему, с помощью команд или новой вкладки сборки в AS 3.1.
1. Добавьте явные зависимости и обновите зависимости
Расширенные версии стандартной библиотеки Kotlin описаны в документации и в этом ответе.
Если вы нацелены на JDK 7 или JDK 8, вы можете использовать расширенные версии стандартной библиотеки Kotlin, которые содержат дополнительные функции расширения для API, добавленных в новые версии JDK.
Вместо
kotlin-stdlib
используйте одну из следующих зависимостей:compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7" compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
В Kotlin 1.1.x используйте
kotlin-stdlib-jre7
а такжеkotlin-stdlib-jre8
вместо.
Обновите другие зависимости, если автоматическое разрешение не работает должным образом (см. Пункт 5).
2. Настройте обновления плагинов Gradle и Kotlin
Пересмотрите свою конфигурацию Gradle. Чтобы построить проект Android, написанный на Kotlin:
- Настройте
kotlin-android
Gradle плагин и применить его к своему проекту. - добавлять
kotlin-stdlib
зависимостей.
Эти действия также могут выполняться автоматически в IntelliJ IDEA / AS, вызывая действие:
Инструменты | Котлин | Настроить Kotlin в проекте
Проверьте обновления плагина Kotlin:
Инструменты | Котлин | Настроить обновления плагина Kotlin
3. kotlin-stdlib-jre7 переименован в kotlin-stdlib-jdk7 во время выпуска 1.2.x
Сирра прокомментировала 27 декабря 2017 года здесь:
Kotlin stdlib был переименован во время выпуска 1.2.x. Смотрите здесь.
Старое имя
kotlin-stdlib-jre7
был изменен наkotlin-stdlib-jdk7
,На эту библиотеку ссылаются в
realm-library
а такжеkotlin-extensions
,
4. Realm обновлен до Kotlin 1.2 в версии 4.3.2
Обновите Gradle Wrapper до 4.4.1 и обновите до Kotlin 1.2 ( # 5642)
Обновление Gradle Wrapper и обновление до Kotlin 1.2
kotlin-stdlib-jre7 -> kotlin-stdlib-jdk7
5. Найдите конфликтующие зависимости с помощью команды или вкладки сборки начиная с AS 3.1
./gradlew -q dependencies app:dependencies --configuration variantDebugCompileClasspath
Начиная с Android Studio 3.1 Beta 1, вы можете использовать новую вкладку сборки, чтобы найти конфликтную зависимость:
В этом случае вы удалили предупреждение и устранили проблему, обновив версию Realm до 4.3.2:
Также это можно проверить в сборках Travis-ci, учитывая, что загружены зависимости порядка:
Что вы также можете сделать, это просто удалить (или переместить) дополнительные папки версий. например, удалите одну из двух папок ниже, затем пересоберите, и это должно избавить от предупреждения времени выполнения kotlin.
~ /.Gradle / кэширует / модули-2 / файлы-2,1/org.jetbrains.kotlin/ Котлин-STDLIB-jdk7 /1.2.10
~ /.Gradle / кэширует / модули-2 / файлы-2,1/org.jetbrains.kotlin/ Котлин-STDLIB /1.2.10