有时,我的Gradle同步将失败。我会收到无益的消息,即“第三方Gradle插件”可能是原因。如果打开事件日志,则会看到以下消息:
Outdated Kotlin Runtime
Your version of Kotlin runtime in 'Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.2.10@jar' library is 1.2.10-release-109 (1.2.10), while plugin version is 1.2.51-release-Studio3.1-1.
Runtime library should be updated to avoid compatibility problems.
不匹配的数字既不是我的Gradle文件中的Kotlin版本,也不是Android Studio中我的Kotlin插件的版本。
运行Gradle依赖树后,我找到了罪魁祸首:
+--- io.realm:realm-android-kotlin-extensions:5.1.0
| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.10 -> 1.2.51
我不包括任何realm-android-kotlin-extensions
库。我假设它是由classpath "io.realm:realm-gradle-plugin:5.1.0"
和apply plugin: "realm-android"
这使事情变得困难。如果是常规依赖项,我可以尝试类似
implementation "io.realm:realm-android-kotlin-extensions:5.1.0" {
transitive = false
}
或
implementation "io.realm:realm-android-kotlin-extensions:5.1.0" {
exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib-jdk7"
}
从理论上讲,这可能会起作用。它将被迫使用较新版本的Kotlin,错误将消失,并希望Gradle同步能够正常工作,并且世界上一切都会好起来。但是,如果我尝试这种方法,则Gradle同步失败,并且在事件日志中收到此错误:
Gradle sync failed: Could not find method io.realm:realm-android-kotlin-extensions:5.1.0() for arguments [build_2krw7i3nwfkd5lrq1ly9b8huw$_run_closure3$_closure29@7b5b2081] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
我假设这是因为这不是我添加的依赖项(也许不是公共依赖项?),而失败是因为该依赖项是通过插件添加的,而不是直接在Gradle文件中添加的。
那我该如何解决呢?也许我可以添加一行内容来告诉Realm插件排除过时的依赖关系?还是我完全吠叫了错误的树,而我的Kotlin版本冲突问题的解决方案完全是另外一回事?
(顺便说一句,顺便说一句,如果您想知道为什么我使用Realm 5.1.0、5.3.1会在我们的应用程序中导致一些奇怪的错误,因此我们正在等待发布更高版本,以希望造成问题的时间更长。)
答案 0 :(得分:3)
我个人的“我希望我一年前就知道这一点”列表上的一件事是,您可以手动将Realm添加到您的项目中,而不是依赖Gradle插件。
buildscript {
ext.kotlin_version = '1.2.51'
ext.realm_version = '5.3.1'
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath "io.realm:realm-transformer:5.1.0"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
import io.realm.transformer.RealmTransformer
android.registerTransform(new RealmTransformer(project))
dependencies {
implementation "io.realm:realm-annotations:$realm_version"
implementation "io.realm:realm-android-library:$realm_version"
implementation "io.realm:realm-android-kotlin-extensions:$realm_version" {
exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib-jdk7"
}
kapt "io.realm:realm-annotations-processor:$realm_version"
}
按照docs。