警告:classpath中的Kotlin运行时JAR文件应具有相同的版本


83

我收到以下警告,但不确定v1.0.6所在的位置。

此错误是否有可能来自Kotlin库,包括旧的Kotlin版本?

关于如何解决它的任何想法,或者至少我如何遵循使Kotlin-reflect明确(1.1)的建议?

在此处输入图片说明

Answers:


95

看来您的项目是以依赖于kotlin-stdlib1.1和kotlin-reflect1.0的方式配置的。最可能的情况是您已经明确依赖于kotlin-stdlib1.1,但没有依赖于kotlin-reflect,而某些其他库(您所依赖)则依赖于kotlin-reflect1.0。

如果确实如此,解决方案是提供对kotlin-reflect1.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 {
    implementation "org.jetbrains.kotlin:kotlin-reflect:1.1.0"
}

请参阅官方文档中有关此警告和相关警告的一些信息。


升级到1.1.1会怎样?因为这个1.1.0新依赖项,我会再次收到警告吗?
ycomp

4
不,仅当主要/次要版本不匹配时,才会出现警告。我们保持补丁程序版本更新之间完全兼容
Alexander Udalov

26

我通过覆盖应用中使用的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


我添加了,但仍然收到相同的错误。它让我
发疯

@GithithuWambura将其直接放在应用程序build.gradle中,而无需添加android {}例如
Vlad

8

首先,通过下面的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. 或遵循其他答案。

我不确定什么是最好的方法。请参考一下。


5

当您在Kotlin专案(android)中使用匕首且Kotlin版本为1.7时,即会发生

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

所有您需要做的就是将下面的依赖项添加到您的应用程序构建gradle级别

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

0

确保使用相同版本的stdlib-jdk7kotlin-gradle-plugin依赖项以避免警告。
您可以参考以下示例,其中stdlib-jdk7kotlin-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" 
         ...
    }

}


-2

我遇到了同样的问题,但这是由于Dagger错误注入


2
使用的StackOverflow前,请仔细阅读本链接stackoverflow.com/tour
安图

2
@Antu老实说,我刚刚添加了Dagger注入并获得了相同的消息,因此此答案没有错。这不是一个完整的解决方案,但是它提供了指向何处的指针。
RickardElimää
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.