У меня есть проект студии Android, в который я добавил модуль библиотеки Java, который я назвал core. Мои три файла сборки Gradle выглядят так.

проект / build.gradle

buildscript {
    ext.kotlin_version = '1.2.40'
    репозитории {
        Google()
        jcenter ()
    }
    dependencies {
        путь к классам 'com.android.tools.build:gradle:3.0.1'
        путь к классам "org.jetbrains.kotlin: kotlin-gradle-plugin: $ kotlin_version"
    }
}

allprojects {
    репозитории {
        Google()
        jcenter ()
    }
}

очистка задачи (тип: Удалить) {
    удалить rootProject.buildDir
}

ядро ​​/ build.gradle

применить плагин: 'java-library'
применить плагин: 'kotlin'

dependencies {
    реализация "org.jetbrains.kotlin: kotlin-stdlib-jdk7"
    ...
}

приложение / build.gradle

применить плагин: 'com.android.application'
применить плагин: 'kotlin-android'
применить плагин: 'kotlin-android-extensions'

android {...}

dependencies {
    проект внедрения (': core')
    реализация "org.jetbrains.kotlin: kotlin-stdlib-jdk7: $ kotlin_version"
    реализация 'com.android.support.constraint: constraint-layout: 1.1.0'
    реализация 'com.android.support:appcompat-v7:27.1.1'

    androidTestImplementation 'com.android.support.test: runner: 1.0.1'
    androidTestImplementation 'com.android.support.test.espresso: espresso-core: 3.0.1'
    testImplementation 'junit: junit: 4.12'
}

Проблема в том, что в core / build.gradleстрока kotlin-stdlib-jdk7 выдает предупреждение Версия плагина (1.2.40 ) не совпадает с версией библиотеки (jdk7-1.2.40). Я попытался изменить его на:

реализация "org.jetbrains.kotlin: kotlin-stdlib"

реализация "org.jetbrains.kotlin: kotlin-stdlib: 1.2.40"

реализация "org.jetbrains.kotlin: kotlin-stdlib-jdk7: 1.2.40"

реализация "org.jetbrains.kotlin: kotlin-stdlib-jdk7: $ kotlin_version"

реализация "org.jetbrains.kotlin: kotlin-stdlib-jre7: $ kotlin_version"

Но предупреждение все равно есть. Сборка по-прежнему выполняется успешно, и я знаю, что могу без проблем подавить предупреждение и проигнорировать его, но я действительно хочу знать, почему это происходит и как от него избавиться. Я использую Android Studio 3.0.1. Кто-нибудь знает решение этого?

Leo Aso

Ответы (6)

Начиная с Kotlin 1.4 зависимость от стандартной библиотеки добавлена ​​по умолчанию:

Вам больше не нужно объявлять зависимость от библиотеки stdlib в любом проекте Kotlin Gradle, включая мультиплатформенный. Зависимость добавляется по умолчанию.

Автоматически добавляемая стандартная библиотека будет той же версией плагина Kotlin Gradle, поскольку у них одинаковое управление версиями.

Для исходных наборов, зависящих от платформы, используется соответствующий вариант библиотеки, зависящий от платформы, а к остальным добавляется общая стандартная библиотека. Плагин Kotlin Gradle выберет соответствующую стандартную библиотеку JVM в зависимости от параметра компилятора kotlinOptions.jvmTarget вашего скрипта сборки Gradle.

Ссылка на документацию плагина Kotlin Gradle.

Это ошибка в плагине Kotlin. Я зарегистрировал проблему в системе отслеживания проблем Kotlin. Вы можете просто проигнорировать сообщение.

РЕДАКТИРОВАТЬ: JetBrains пометил проблему как дубликат KT-23744 "Библиотека Kotlin и версии плагина Gradle отличаются" проверка ложноположительных зависимостей, не связанных с JVM ".

через много дней я решил проблему Обновите kotlin_version до '1.4.32'

[build.gradle (Модуль)]

dependencies {
    implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.5.10'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.10'
    ...
}

Мой проект добавлен автоматически

(implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.10') 

в файл сборки проекта. После перемещения реализации в файл модуля и удаления

(implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.10')

предупреждение исчезло. 'Stdlib' должен соответствовать 'stdlib-jdk' в файле модуля.

Я столкнулся с той же проблемой при использовании Firebase с Kotlin. Мне пришлось обновить все зависимости до последней доступной версии.

Примечание: используйте одинаковые версии kotlin-reflection и kotlin-stdlib.

Вы можете столкнуться с этим после обновления версии kotlin. На самом деле, более старые версии все еще находятся в ваших кешах. В этом случае вам необходимо выполнить следующие шаги

  1. Недействительный кеш
  2. Чистый проект
  3. Синхронизировать проект с файлами Gradle

Теперь ваше предупреждение исчезнет.

2022 WebDevInsider