android.arch.persistence.room :testing depends on Kotlin?

标签 android kotlin android-room

很久以前,我为我的 android studio 项目启用了 Kotlin 支持,然后将其删除。 Android Studio,hovewer,不会停止通知我更新的 kotlin 库版本可用。随便。

我已经关闭了 Kotling 插件,删除了它和 gradle 中的所有 Kotling 配置(如果这意味着什么,所有 .kt 文件也被删除了)

我的项目是用 Java 编写的,没有启用任何 Kotlin 库\插件\等。 我正在编写一些 Room 迁移测试并尝试启动它们,但收到的消息是

Conflict with dependency 'org.jetbrains.kotlin:kotlin-stdlib' in project ':my-project'. Resolved versions for app (1.1.2-3) and test app (1.2.41) differ. See https://d.android.com/r/tools/test-apk-dependency-conflicts.html for details.

通过依赖树并在新项目中进行测试,我意识到,当我使用时添加了 kotlin-stdlib 依赖

androidTestImplementation 'android.arch.persistence.room:testing:1.1.1'

我发现 android.arch.persistence.room.migration 添加了 kotlin-stdlid 依赖项。 我反编译了那个 jar,发现没有理由包含 kotlin 库。

我仍然忍受所有 Kotlin 的东西只是因为我需要让我的测试工作。

我有几个问题:

1) 我可以在没有 kotlin 依赖项的情况下使用“android.arch.persistence.room:testing:1.1.1”吗?

2) 如果 1 个问题的答案是“否”,我是否可以仅将 kotlin 依赖项用于测试?

3) 如何删除项目中的旧 kotlin 库 (1.1.2-3)。在 gradle 文件或项目中的其他任何地方都没有定义 kotlin 库。

UPD:androidDependencies 的 kotlin-STLib 输出:

:my-project:androidDependencies
debug
debugCompileClasspath - Dependencies for compilation
+--- org.jetbrains.kotlin:kotlin-stdlib:1.1.2-3@jar

debugRuntimeClasspath - Dependencies for runtime/packaging
+--- org.jetbrains.kotlin:kotlin-stdlib:1.1.2-3@jar

debugAndroidTest
debugAndroidTestCompileClasspath - Dependencies for compilation
+--- org.jetbrains.kotlin:kotlin-stdlib:1.2.41@jar

debugAndroidTestRuntimeClasspath - Dependencies for runtime/packaging
+--- org.jetbrains.kotlin:kotlin-stdlib:1.2.41@jar

debugUnitTest
debugUnitTestCompileClasspath - Dependencies for compilation
+--- org.jetbrains.kotlin:kotlin-stdlib:1.1.2-3@jar

debugUnitTestRuntimeClasspath - Dependencies for runtime/packaging
+--- org.jetbrains.kotlin:kotlin-stdlib:1.1.2-3@jar

release
releaseCompileClasspath - Dependencies for compilation
+--- org.jetbrains.kotlin:kotlin-stdlib:1.1.2-3@jar

releaseRuntimeClasspath - Dependencies for runtime/packaging
+--- org.jetbrains.kotlin:kotlin-stdlib:1.1.2-3@jar

releaseUnitTest
releaseUnitTestCompileClasspath - Dependencies for compilation
+--- org.jetbrains.kotlin:kotlin-stdlib:1.1.2-3@jar

releaseUnitTestRuntimeClasspath - Dependencies for runtime/packaging
+--- org.jetbrains.kotlin:kotlin-stdlib:1.1.2-3@jar

最佳答案

回答我的问题:

1) 我可以在没有 kotlin 依赖项的情况下使用“android.arch.persistence.room:testing:1.1.1”吗?

没有,因为它依赖它。例如,我发现了 kotlin.reflect.KDeclarationContainer 类的用法。

2) 如果 1 个问题的答案是“否”,我可以仅将 kotlin 依赖项用于测试吗?

,此库将仅可用于测试使用

androidTestImplementation 'android.arch.persistence.room:testing:x.x.x'

3) 我怎样才能摆脱项目中的旧 kotlin 库 (1.1.2-3)。 gradle 文件或项目中的其他任何地方都没有定义 kotlin 库。

在我的例子中,这个库是对项目中另一个依赖项的依赖项。

您可以使用

简单地检测所有传递依赖项

./gradlew dependencies

命令或通过 Android Studio GUI 使用

Gradle --> :your-module --> Tasks --> help --> dependencies

我刚刚将这个第三方库更新到最新版本,因此依赖的 kotlin-STLib 版本变得相同。

如果你想强制覆盖使用 kotlin 版本,你可以在模块的 build.gradle 中执行:

// This is example to force using 1.2.41 kotlin version instead of any other **FOR ALL** libraries
   configurations.all {
      resolutionStrategy {
          force 'org.jetbrains.kotlin:kotlin-stdlib:1.2.41'
      }
} 

此外,您可以更精确地排除或强制特定模块依赖的传递依赖。请看:

https://docs.gradle.org/current/userguide/managing_transitive_dependencies.html

关于android.arch.persistence.room :testing depends on Kotlin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53008014/

相关文章:

java - 设置监听器的更好方法是什么?

android - Android 中的环形发光动画

kotlin - 如果传递了空值,如何将非空字符串变量的值设置为空

java - 房间 : @Embedded vs @TypeConverters

android - Jetpack Compose 中的 PaddingValues(底部填充除外)

android - 有没有办法在旧的 Android 设备( donut )上升级 API 级别?

安卓房间 : Synchronous queries return null

kotlin - 如何在Kotlin的扩展函数中使用map()

android - 想要在整数列表中返回 0 IF SUM(something) 为 null

android - 房间数据库 onConflict = OnConflictStrategy.REPLACE 不起作用