【问题标题】:Android Studio shows Kotlin Dependency Warning after Second BuildAndroid Studio 在第二次构建后显示 Kotlin 依赖警告
【发布时间】:2017-12-15 13:19:34
【问题描述】:

我刚刚在我的 Android 项目中启用了 Kotlin,我偶然发现了一个警告。在第二次构建(构建 -> 重建项目)之后,此警告显示在消息下方:

Warning:Runtime JAR files in the classpath should have the same version. These files were found in the classpath:
~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.2.10/85fe1811f3e586d0cc53aba1394d8089f1862215/kotlin-stdlib-jdk8-1.2.10.jar (version 1.2)
~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-reflect/1.2.10/19bc012f8c4cd6b705bd6512263777cc19bcf259/kotlin-reflect-1.2.10.jar (version 1.2)
/Applications/Android Studio.app/Contents/gradle/m2repository/org/jetbrains/kotlin/kotlin-stdlib-jre7/1.1.51/kotlin-stdlib-jre7-1.1.51.jar (version 1.1)
~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.2.10/cfe8b616b3bf0811ef70863c86b745a2e767a66e/kotlin-stdlib-jdk7-1.2.10.jar (version 1.2)
~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.2.10/b9bf650516989595a5390e5a54181e16347208ac/kotlin-stdlib-1.2.10.jar (version 1.2)

似乎第二个版本包含缓存中的过时kotlin-stdlib-jre7-1.1.51.jar。在一个干净的构建(构建 -> 清洁项目)之后,警告消失了,下一个重建项目再次出现。

我使用的是 Android Studio 3.0.1,并且我明确地将 Kotlin 依赖项包含在版本中:

build.gradle

buildscript {
    ext {
        // shared build properties
        kotlin_version      = '1.2.10'
        buildToolsVersion   = '27.0.2'
        minSdkVersion       = 15
        targetSdkVersion    = 27
        compileSdkVersion   = 27
    }
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:3.0.1"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlin_version}"
    }
}

app/build.gradle

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

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlin_version}"
    implementation "org.jetbrains.kotlin:kotlin-reflect:${kotlin_version}"
    [...]
}

在我们的travis builds 上也会显示警告。因此,这不仅是我本地设置的问题。即使这只是一个警告,我也不愿意发布包含冲突版本的 apk。

【问题讨论】:

标签: android android-studio android-gradle-plugin kotlin


【解决方案1】:

总结

  1. 您已经修复了它,更新了您的依赖项,但我会在这里回答以链接相关问题。

  2. 您正确配置了项目依赖项并将 Kotlin 插件更新到 1.2。

  3. 这通常和here 差不多,但在 Kotlin 1.2 中 stdlib-jre 依赖项已更改为 jdk。

  4. 但是您的项目依赖于 Realm 版本 4.3.1,他们在 4.3.2 版本中修复了这个问题。

  5. 您可以通过命令或 AS 3.1 中的新构建选项卡找到导致问题的依赖项。


1。添加显式依赖和更新依赖

Kotlin 标准库的扩展版本在 documentationthis answer. 中进行了解释

如果您面向 JDK 7 或 JDK 8,则可以使用 包含附加扩展的 Kotlin 标准库 新 JDK 版本中添加的 API 函数。

使用以下依赖项之一,而不是 kotlin-stdlib

compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"

在 Kotlin 1.1.x 中,使用 kotlin-stdlib-jre7kotlin-stdlib-jre8 而是。

如果自动解析无法正常工作,请更新其他依赖项(参见第 5 点)。


2。配置 Gradle 和 Kotlin 插件更新

修改您的 Gradle 配置。为了to build an Android project written in Kotlin

  • 设置kotlin-android gradle 插件并将其应用到您的项目中。
  • 添加kotlin-stdlib 依赖项。

这些动作也可以在 IntelliJ IDEA 中自动执行 / AS 通过调用操作:

工具 |科特林 |在项目中配置 Kotlin

检查 Kotlin 插件更新:

工具 |科特林 |配置 Kotlin 插件更新


3。 kotlin-stdlib-jre7 在 1.2.x 版本中重命名为 kotlin-stdlib-jdk7

Sirrah 于 2017 年 12 月 27 日发表评论 here:

Kotlin 标准库在 1.2.x 版本中被重命名。见here

旧名称kotlin-stdlib-jre7 更改为kotlin-stdlib-jdk7

realm-librarykotlin-extensions 中引用了此库。


4。 Realm 在 4.3.2 版本中更新到 Kotlin 1.2

Update Gradle Wrapper to 4.4.1 and Update to Kotlin 1.2 (#5642)

  • 更新 Gradle Wrapper 并更新到 Kotlin 1.2

  • kotlin-stdlib-jre7 -> kotlin-stdlib-jdk7


5。从 AS 3.1 开始通过命令或构建选项卡查找冲突的依赖项

./gradlew -q dependencies app:dependencies --configuration variantDebugCompileClasspath

从 Android Studio 3.1 Beta 1 开始,您可以使用新的构建选项卡来查找冲突的依赖项:

在这种情况下,您删除了警告并修复了将 Realm 版本更新到 4.3.2 的问题:

考虑到下载的顺序依赖项,也可以在 Travis-ci 构建中检查它:

【讨论】:

  • 感谢您的详尽解释。我也不知道 Realm 捆绑了 Kotlin 依赖项。对于这种情况,冲突依赖的命令会派上用场。
  • @albodelu 你能解释一下如何使用“构建”选项卡来查找冲突的依赖项吗?
  • 如果我使用 gradlew 来查找哪些依赖项正在创建冲突,我会收到此错误“未找到名称为 'variantDebugCompileClasspath' 的配置。”有什么帮助吗?我无法摆脱这个问题。
【解决方案2】:

您还可以简单地删除(或移动)额外的版本文件夹。 例如,删除以下两个文件夹之一,然后重新构建,这样应该可以消除 kotlin 运行时警告。

~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.2.10

~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.2.10

【讨论】:

  • 只需删除 .gradle/caches/folder-name 文件夹即可解决我的问题。谢谢@Jamie
  • 删除对我没有帮助,只是在构建时将其放回原处。
猜你喜欢
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 1970-01-01
  • 2022-01-27
  • 2018-09-11
  • 2015-02-02
  • 2020-07-16
  • 1970-01-01
相关资源
最近更新 更多