Предупреждение: JAR-файлы среды выполнения Kotlin в classpath должны иметь одинаковую версию

Я получаю следующее предупреждение, но я не уверен, где находится v1.0.6.

Возможно ли, что эта ошибка происходит из библиотеки Kotlin, как-то включающей старую версию Kotlin?

Любые идеи, как это исправить или, по крайней мере, как я могу следовать предложению, чтобы сделать kotlin-отражение явным (1.1)?

17 ответов

Решение

Похоже, ваш проект настроен так, что вы зависите от kotlin-stdlib 1,1 и kotlin-reflect 1,0. Скорее всего, у вас уже есть явная зависимость от kotlin-stdlib 1.1 но не зависит от kotlin-reflectи некоторые другие библиотеки (от которых вы зависите) зависят от kotlin-reflect 1,0.

Если это действительно так, решение состоит в том, чтобы обеспечить явную зависимость от kotlin-reflect 1.1.

В Maven добавьте это в pom.xml:

    <dependencies>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-reflect</artifactId>
            <version>1.1.0</version>
        </dependency>
    </dependencies>

В Gradle добавьте это в build.gradle:

dependencies {
    compile "org.jetbrains.kotlin:kotlin-reflect:1.1.0"
}

См. Некоторую информацию об этом и связанных предупреждениях в официальных документах.

Во -первых, выясните причину с помощью скрипта gradle ниже

./gradlew app:dependencies

(менять app к имени вашего модуля gradle)

+--- project :common
|    +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.61
|    |    +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61
|    |    \--- org.jetbrains:annotations:13.0
|    +--- org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.3.3
|    |    \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61
|    +--- org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:0.12.0 -> 0.14.0
|    |    \--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.60 -> 1.3.61

Затем будет показано дерево зависимостей. проверьте, какая зависимость использует зависимость задачи.

Если вы нашли зависимость, решите, как ее решить.

  1. обновить версию зависимости (последняя версия зависимости может относиться к последней версии зависимости проблемы)
  2. или исключить зависимость задачи из зависимости
  3. или следуйте другим ответам.

Я не уверен, что лучше. пожалуйста, просто обратитесь к нему.

Я исправил предупреждение, переписав версию kotlin, используемую в моем приложении

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'org.jetbrains.kotlin' && requested.name == 'kotlin-reflect') {
            details.useVersion kotlin_version
        }
    }
}

например kotlin_version = 1.3.0

Это происходит, когда вы используете кинжал в проекте kotlin (android), и у вас версия kotlin 1.7, т.е.

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

все, что вам нужно сделать, это добавить зависимость ниже к уровню градиента сборки вашего приложения

  implementation "org.jetbrains.kotlin:kotlin-reflect:1.3.50"

Убедитесь, что вы используете ту же версию stdlib-jdk7 & kotlin-gradle-pluginзависимости, чтобы избежать предупреждений.
Вы можете сослаться на пример ниже, где stdlib-jdk7 & kotlin-gradle-plugin у обоих одинаковая версия

файл build.gradle на уровне приложения

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.0"
    ...
}

файл build.gradle на уровне проекта

buildscript {
    dependencies {
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.0" 
         ...
    }

}

заменить это

        implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.4.30'

с

      implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.30'

версия библиотеки должна быть такой же, как плагин на уровне проекта

       classpath org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.30

Для проекта, инициализированного флаттером, я прокомментировал эту строку, чтобы сослаться на уже доступную библиотеку.

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

а это пропало:

      w: Some runtime JAR files in the classpath have an incompatible version. Consider removing them from the classpath

w: Runtime JAR files in the classpath should have the same version. These files were found in the classpath:

Для меня в нашем реактивном проекте мне просто нужно было добавитьkotlinVersion = "1.6.10"кbuildscript.extвandroid/build.gradleфайл.

      // Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext {
        buildToolsVersion = "30.0.2"
        minSdkVersion = 23
        compileSdkVersion = 31
        targetSdkVersion = 31
        ndkVersion = "21.4.7075529"
        kotlinVersion = "1.6.10"
    }
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath("com.android.tools.build:gradle:4.2.2")
        classpath 'com.google.gms:google-services:4.3.10'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        mavenCentral()
        mavenLocal()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url("$rootDir/../node_modules/react-native/android")
        }
        maven {
            // Android JSC is installed from npm
            url("$rootDir/../node_modules/jsc-android/dist")
        }

        google()
        maven { url 'https://www.jitpack.io' }
    }
}

Версия Kotlin в build.gradle и версия, поставляемая с вашей IDE, имеют разные версии. Проверьте версию kotlin в build.gradle (приложение) и в Tools -> Kotlin -> Configure Kotlin Plugin Updates.

Чтобы использоватьresolutionStrategyподход (см. ответ @vlad /questions/1629804/preduprezhdenie-jar-fajlyi-sredyi-vyipolneniya-kotlin-v-classpath-dolzhnyi-imet-odinakovuyu-versiyu/1629812#1629812 ) с Gradle Kotlin DSL:

      // this one defines it via rootProject e.g. `gradle.properties`
// change as needed
val kotlinVersion: String by rootProject

configurations.all {
  resolutionStrategy {
    force(
      "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}",
      "org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion}",
      "org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}",
    )
  }
}

Когда это происходит для задачи Lint, можно перечислить зависимости с помощью:

      ./gradlew -q dependencies app:dependencies --configuration lintClassPath

Что показывает, например. kotlin-stdlib-jdk8:1.4.32используется:

       +--- org.jetbrains.kotlin:kotlin-reflect:1.4.32 (*)
 \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.32 (*)

Я написал скрипт Gradle, который уравнивает все версии библиотеки Kotlin:

      // Runtime JAR files in the classpath should have the same version.
configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def kotlinVersion = "1.6.0"
        def requested = details.requested
        if (requested.group == 'org.jetbrains.kotlin') {
            List<String> list = ['kotlin-stdlib', 'kotlin-stdlib-jdk7', 'kotlin-stdlib-jdk8', 'kotlin-stdlib-common']
            if (list.contains(requested.name)) { details.useVersion kotlinVersion }
        }
    }
}

Другого пути нет, потому что некоторые старые версии подтягиваются инструментами сборки.
Вероятно, можно было бы также добавить kotlin-reflectв List<String> list(не испытано).

Я столкнулся с той же проблемой, но это было из-за неправильной инъекции Dagger

Комментарий @Photo Point из этого ответа - это то, что сработало для меня

      configurations.all {
    resolutionStrategy {
        eachDependency {
            if ((requested.group == "org.jetbrains.kotlin") && (!requested.name.startsWith("kotlin-gradle"))) { useVersion(kotlin_version) }
        }
    }
}

И добавлен уровень приложенияbuild.gradleфайл:

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

Надеюсь, это поможет, так как это сводило меня с ума на некоторое время!

Обновление вашей собственной версии Kotlin в вашем проекте работает в соответствии с используемой версией ваших зависимостей.

Мне помогло обновление kotlin с 1.5.21 до 1.6.0 после обновления Room с 2.3.0 до 2.4.x

Добавление приведенного ниже кода в build.gradle внутри android{//вставьте сюда код} сработало;

      lintOptions {
        disable 'InvalidPackage'
        checkReleaseBuilds false
    }

Я обновился до последней версии Gradle. вот когда я столкнулся с этой ошибкой

Так что вам нужно только удалить старую папку gradle, и это решит проблему /android/.gradle

ДЛЯ РАЗРАБОТЧИКОВ ANDROID С ОШИБКОЙ, ПРОИСХОДЯЩЕЙ В XML НЕРАСПОЗНАННОМ ФАЙЛЕ

Если это в Android и появляется ошибка из-за того, что файл xml не распознается, вы можете найти какую-либо ошибку в файлах папки xml (в моем случае один из файлов имел дублированный тег)

Другие вопросы по тегам