ChatGPT解决这个技术问题 Extra ChatGPT

警告“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。有谁知道解决这个问题?


S
Spatz

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

您不再需要在任何 Kotlin Gradle 项目(包括多平台项目)中声明对 stdlib 库的依赖。默认情况下会添加依赖项。自动添加的标准库将与 Kotlin Gradle 插件的版本相同,因为它们具有相同的版本控制。对于特定于平台的源集,使用相应的特定于平台的库变体,而在其余部分添加一个通用标准库。 Kotlin Gradle 插件将根据 Gradle 构建脚本的 kotlinOptions.jvmTarget 编译器选项选择适当的 JVM 标准库。

Link Kotlin Gradle 插件文档。


这是正确答案,例如您不再需要 implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
因此,该错误位于新库或项目的 android studio 模板上,它将此依赖项作为默认设置。
@Spatz:您能否提供 Jetbrains 的任何官方声明/链接以进行上述更改。
H
Honza Zidek

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

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


仍然是 AS 3.3.1 和 kotlin 版本 1.3.21 中的一个错误
仍然存在于 AS 3.5 &科特林 1.3.50
仍然存在于 AS 4.0 和 Kotlin 1.3.72
仍然存在于 AS 4.1 和 Kotlin 1.4.10
仍然存在于 AS 4.1.1 和 Kotlin 1.4.20
c
cigien

解决方案,就我而言,我在应用程序级别 Gradle 中删除了行 implementation"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."

A
Amit Gupta

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

使缓存失效 清理项目 将项目与 gradle 文件同步

现在你的警告将消失。


D
David

[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”。


A
Abhijeet Prasad

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

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


G
GURPREET SINGH

很多天后,我解决了问题将 kotlin_version 更新为“1.4.32”


S
Sayed Abolfazl Fatemi

就我而言,我将所有模块的版本号设置为与 app 的 gradle 相同的最新版本,问题已解决。