android.arch.persistence.room:测试取决于Kotlin吗?

时间:2018-10-26 11:44:50

标签: android kotlin android-room

很久以前,我为我的android studio项目启用了Kotlin支持,然后将其删除。不过,Android Studio并没有停止通知我有关可用的较新的kotlin libs版本。随便。

我已经关闭了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 lib(1.1.2-3)。 gradle文件或项目中其他任何地方都没有定义kotlin lib。

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 个答案:

答案 0 :(得分:1)

回答我的问题:

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 lib(1.1.2-3)。在gradle文件或项目中的其他任何地方都没有定义kotlin库。

就我而言,此lib是项目中另一个依赖项的依赖项。

您可以使用

来检测所有传递依存关系

./ gradlew依赖项

命令或使用

通过Android Studio GUI

等级->:您的模块->任务->帮助->依赖项

我刚刚将此第三方库更新为最新版本,因此依赖的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