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

im9ewurl  于 2023-03-13  发布在  Kotlin
关注(0)|答案(9)|浏览(296)

我有一个Android Studio项目,在其中添加了一个Java库模块,我将其命名为core。我的三个Gradle构建文件如下所示。
项目/构建.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
}

核心/构建级别

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

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

应用程序/构建.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。有人知道解决方案吗?

a6b3iqyw

a6b3iqyw1#

从Kotlin1.4开始默认添加对标准库的依赖:
您不再需要在任何KotlinGradle项目(包括多平台项目)中声明对stdlib库的依赖关系。
自动添加的标准库将与KotlinGradle插件版本相同,因为它们具有相同的版本控制。
对于特定于平台的源集,将使用库的相应特定于平台的变体,同时向其余部分添加通用标准库。KotlinGradle插件将根据Gradle构建脚本的kotlinOptions.jvmTarget编译器选项选择适当的JVM标准库。
链接到KotlinGradle插件文档。

nbnkbykc

nbnkbykc2#

这是Kotlin插件中的一个bug。我已经在Kotlin问题跟踪器中归档了an issue。你可以简单地忽略这个消息。
编辑:JetBrains将此问题标记为KT-23744“Kotlin库和Gradle插件版本不同”的重复问题,非JVM依赖项检查出现误报。

zf9nrax1

zf9nrax13#

解决方案,在我的例子中,我去掉了应用级别Gradle中的行实现“org.jetbrains.Kotlin:kotlin-stdlib-jdk 7:$kotlin_version”,警告也随之消失正如Kotlin页面所示:“您不再需要在任何KotlinGradle项目(包括多平台项目)中声明对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."
goqiplq2

goqiplq24#

升级Kotlin版本后,您可能会遇到这种情况,实际上,旧版本仍然在您的缓存中,在这种情况下,您需要执行以下步骤
1.使缓存无效
1.清洁项目
1.将项目与Gradle文件同步
现在你的警告将消失。

e4yzc0pl

e4yzc0pl5#

[构建版本.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”匹配。

qcuzuvrc

qcuzuvrc6#

我在使用Firebase和Kotlin时也遇到了同样的问题。我不得不用它们可用的最新版本升级所有的依赖项。

注意:请确保kotlin-reflect和kotlin-stdlib版本相同。

7ivaypg9

7ivaypg97#

多天后我解决了这个问题将Kotlin_version更新为“1.4.32”

gg0vcinb

gg0vcinb8#

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

lxkprmvk

lxkprmvk9#

这是因为kotlin-stdlib,您可以覆盖app/build.gradle中解析jdk版本的方式
查看this answer了解更多详细信息。

相关问题