我刚刚在Android项目中启用了Kotlin,我偶然发现了一个警告。在第二次构建(Build - > Rebuild Project)之后,此警告显示在Messages:
下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
。在干净的构建(Build - > Clean Project)之后,警告消失了,下一个Rebuild Project再次启动它。
我正在使用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}"
}
}
应用/的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也感觉不舒服。
答案 0 :(得分:9)
您已经修复了更新依赖项的问题,但我会在此回答相关问题。
您正确配置了项目依赖项并将Kotlin插件更新为1.2。
这通常就像here一样,但是在Kotlin 1.2中stdlib-jre依赖关系被改为jdk。
但您的项目取决于Realm版本4.3.1,并且他们已在4.3.2版本中修复此问题。
您可以通过命令或AS 3.1中的新构建选项卡找到导致问题的依赖项。
如果您定位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-jre7
和kotlin-stdlib-jre8
代替。
如果自动分辨率无法正常工作,则更新其他依赖项(请参阅第5点)。
修改您的Gradle配置。为了to build an Android project written in Kotlin:
kotlin-android
gradle插件并将其应用于您的项目。kotlin-stdlib
依赖项。这些操作也可以在IntelliJ IDEA /中自动执行 AS通过调用操作:
工具| Kotlin |在项目中配置Kotlin
检查Kotlin插件更新:
工具| Kotlin |配置Kotlin插件更新
Sirrah于2017年12月27日发表评论here:
在1.2.x版本中,Kotlin stdlib已重命名。请参阅here。
旧名称
kotlin-stdlib-jre7
已更改为kotlin-stdlib-jdk7
。
realm-library
和kotlin-extensions
中引用了此库。
Update Gradle Wrapper to 4.4.1 and Update to Kotlin 1.2 (#5642)
更新Gradle Wrapper并更新至Kotlin 1.2
kotlin-stdlib-jre7 - >科特林-STDLIB-JDK7
./gradlew -q dependencies app:dependencies --configuration variantDebugCompileClasspath
从Android Studio 3.1 Beta 1开始,您可以使用新的构建选项卡来查找冲突依赖项:
在这种情况下,您删除了警告并修复了将Realm版本更新为4.3.2的问题:
考虑到下载订单依赖关系,也可以在Travis-ci版本中检查它:
答案 1 :(得分:0)
您还可以做的就是简单地删除(或移动)多余的版本文件夹。 例如,删除下面的两个文件夹之一,然后重新构建,这样就可以摆脱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