Предупреждение: 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
Затем будет показано дерево зависимостей. проверьте, какая зависимость использует зависимость задачи.
Если вы нашли зависимость, решите, как ее решить.
- обновить версию зависимости (последняя версия зависимости может относиться к последней версии зависимости проблемы)
- или исключить зависимость задачи из зависимости
- или следуйте другим ответам.
Я не уверен, что лучше. пожалуйста, просто обратитесь к нему.
Я исправил предупреждение, переписав версию 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 (в моем случае один из файлов имел дублированный тег)