警告“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"
...
}

app / 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。有人知道怎么解决这个问题吗?

81334 次浏览

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

编辑:JetBrains将该问题标记为kt - 23744的副本“Kotlin库和Gradle插件版本不同”“非jvm依赖项检查假阳性”。

从默认添加的标准库的芬兰湾的科特林1.4依赖项开始:

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

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

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

链接到Kotlin Gradle插件文档。

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

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

[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'

经过许多天,我已经解决了这个问题 更新kotlin_version到'1.4.32'

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

  1. 缓存失效
  2. 清洁项目
  3. 同步项目与gradle文件

现在你的警告将会消失。

在我的例子中,我去掉了这一行 implementation" org.jetbrains.kotlin: kotlin-stdlib-jdk7: kotlin_version"美元; 在应用程序级别Gradle和警告消失 正如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."

在我的例子中,我将所有模块的版本号设置为app的gradle作为最新版本,问题就解决了。