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

Leo*_*Aso 32 android gradle kotlin android-studio

我有一个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
}
Run Code Online (Sandbox Code Playgroud)

核心/的build.gradle

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

dependencies { 
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
    ...
}
Run Code Online (Sandbox Code Playgroud)

应用程序/的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'
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是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.有谁知道这个解决方案?

Spa*_*atz 260

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

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

自动添加的标准库将是 Kotlin Gradle 插件的相同版本,因为它们具有相同的版本。

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

链接到 Kotlin Gradle 插件文档。

  • 这是正确的答案,例如您不再需要 `implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"` (71认同)
  • 太棒了,最佳答案 (14认同)
  • 因此,该错误位于新库或项目的 android studio 模板上,它默认将此依赖项带来。 (5认同)
  • @HeltonIsac 它甚至在官方 Android Studio 文档中说要这样做:https://developer.android.com/kotlin/add-kotlin (2认同)

yol*_*ole 47

这是Kotlin插件中的一个错误.我在Kotlin问题跟踪器中提交了一个问题.您可以简单地忽略该消息.

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

  • 仍然存在于 AS 4.1 和 Kotlin 1.4.10 中 (58认同)
  • 仍然存在于 AS 4.1.1 和 Kotlin 1.4.20 中 (50认同)
  • 仍然存在于 AS 4.0 和 Kotlin 1.3.72 中 (19认同)
  • 仍然存在于 AS 4.1.1 和 Kotlin 1.4.21 中 (12认同)
  • 仍然是AS 3.3.1和kotlin 1.3.21版中的错误 (10认同)
  • 仍然存在于AS`3.5`和Kotlin`1.3.50`中 (10认同)
  • 仍然存在于AS`3.4.1`和Kotlin`1.3.31`中 (5认同)
  • 只需从 build.gradle 中删除这一行,警告就会消失:implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" (5认同)
  • 仍然存在于 AS 4.1.2 和 Kotlin 1.4.30 中 (5认同)
  • 仍然存在于 AS 4.2 (Canary) 和 Kotlin 1.4.10 中 (4认同)
  • 存在于 AS4.2C14 和 kotlin 1.4.20-M2 中 (4认同)
  • KT-23744已被标记为固定,应在“ 1.3.20”中固定。但是我仍然在android studio上面对Kotlin插件版本1.3.20-release-Studio3.3-1的问题。在IntelliJ for kotlin插件版本`1.3.20-release-IJ2018.3-1`上,我没有这个问题。 (3认同)
  • 仍然存在于AS`3.4`和Kotlin`1.3.30`中。 (3认同)
  • 仍然存在于 AS 3.6 和 Kotlin 1.3.70 中 (3认同)
  • 仍然存在于 AS 4.0 和 Kotlin 1.3.72 中 (3认同)
  • 仍然存在于 AS 4.1 和 Kotlin 1.4.10 中 (3认同)
  • 仍然存在于 AS 4.1 和 Kotlin 1.4.10 中 (3认同)
  • 似乎我们可以根据下面的答案删除从 kotlin 1.4 开始的 stdlib 行。 (3认同)
  • 仍然存在于 AS 4.1.3 和 Kotlin 1.4.32 中 (3认同)
  • 仍然存在于 1.5.20 (3认同)
  • 仍然存在于 AS `3.4.1` 和 Kotlin `1.3.40` (2认同)
  • 仍然存在于 AS 3.6.2 和 Kotlin 1.3.71 中 (2认同)
  • 仍然存在于 AS 4.1 和 Kotlin 1.4.0 中 (2认同)
  • 尽管如此,存在于 AS5.0 和 Kotlin 1.3.72 中,我想没有人关心,永远不会消失,哈哈 (2认同)
  • 仍然存在于 AS 4.2 Canary 10 和 Kotlin 1.4.10 中 (2认同)
  • 1.4.30 好像还存在 (2认同)
  • 你们都需要看到 @Spatz 的以下答案 /sf/answers/4549196571/ 不再需要“实现“org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version”” (2认同)

小智 14

解决方案,就我而言,我在应用程序级别 Gradle 中删除了该行实现“org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version”,并且警告消失正如 Kotlin 页面所说:“您不再需要在任何 Kotlin Gradle 项目(包括多平台项目)中声明对 stdlib 库的依赖项。该依赖项是默认添加的。

The automatically added standard library will be the same version of the Kotlin Gradle plugin, since they have the same versioning.

For platform-specific source sets, the corresponding platform-specific variant of the library is used, while a common standard library is added to the rest. The Kotlin Gradle plugin will select the appropriate JVM standard library depending on the kotlinOptions.jvmTarget compiler option of your Gradle build script."
Run Code Online (Sandbox Code Playgroud)


小智 5

升级 kotlin 版本后您可能会遇到这种情况,实际上旧版本仍在您的缓存中,在这种情况下,您需要执行以下步骤

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

现在你的警告将会消失。