警告“Kotlin插件版本与库版本不同”(但它是!)

时间:2018-04-21 13:04:57

标签: android android-studio gradle kotlin

我有一个Android工作室项目,我在其中添加了一个Java库模块,我称之为core。我的三个Gradle构建文件看起来像这样。

项目/的build.gradle

buildscript {
    ext.kotlin_version = '1.2.40'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

芯/的build.gradle

apply plugin: 'java-library'
apply plugin: 'kotlin'

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

应用程序/的build.gradle

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android { ... }

dependencies {
    implementation project(':core')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    implementation '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行正在向我发出警告Plugin version (1.2.40) is not the same as library version (jdk7-1.2.40)。我已经尝试将其更改为:

implementation "org.jetbrains.kotlin:kotlin-stdlib"

implementation "org.jetbrains.kotlin:kotlin-stdlib:1.2.40"

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.40"

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

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

但警告仍在那里。构建仍然成功运行,我知道我可以毫无问题地压制警告并忽略它,但我真的想知道为什么会发生这种情况以及如何摆脱它。我使用的是Android Studio 3.0.1。有谁知道解决这个问题?

6 个答案:

答案 0 :(得分:33)

这是Kotlin插件中的一个错误。我已经在Kotlin问题跟踪器中提交了an issue。您可以忽略该消息。

编辑:JetBrains将此问题标记为KT-23744" Kotlin库和Gradle插件版本的副本不同"检查非JVM依赖关系的误报"。

答案 1 :(得分:24)

Kotlin 1.4对默认添加的标准库的依赖开始:

您不再需要在任何Kotlin Gradle项目(包括多平台项目)中声明对stdlib库的依赖。依赖项是默认添加的。

自动添加的标准库将具有相同版本的Kotlin Gradle插件。

对于特定于平台的源集,使用库的相应特定于平台的变体,而其余部分则添加一个通用的标准库。 Kotlin Gradle插件将根据您的Gradle构建脚本的kotlinOptions.jvmTarget编译器选项选择适当的JVM标准库。

答案 2 :(得分:0)

我在将 Firebase 与 Kotlin 结合使用时遇到了同样的问题。 我必须使用最新版本升级所有依赖项。

注意:让您的 kotlin-reflect 和 kotlin-stdlib 版本相同。

答案 3 :(得分:0)

[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' 匹配。

答案 4 :(得分:0)

很多天后我解决了这个问题 将 kotlin_version 更新为 '1.4.32'

答案 5 :(得分:0)

升级kotlin版本后你可能会遇到这个问题,其实旧版本还在你的缓存中,在这种情况下,你需要做以下步骤

  1. 使缓存无效
  2. 清理项目
  3. 将项目与 gradle 文件同步

现在您的警告将消失。