很久以前,我为我的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
答案 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