gpt4 book ai didi

java - 如何为 Kotlin 和 Gradle 设置 "sourceCompatibility"?

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:31 24 4
gpt4 key购买 nike

我在 Android 应用上收到 java.lang.NoClassDefFoundError 错误。我设法将问题隔离到对 List::replaceAll 的调用。问题是该方法适用于 Java 8,在某些设备上不可用,而 Kotlin/Gradle 正在成功编译它。

类似问题:java.lang.NoClassDefFoundError $$inlined$forEach$lambda$1 in Kotlin

我的问题是。有没有办法在我的项目中使用 Java 8 SDK 时出现编译错误?我尝试过手动设置 Java 1.7,如下所示,但使用 Java 8 的代码编译成功。

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
sourceCompatibility = JavaVersion.VERSION_1_7 // Is it even relevant here?
targetCompatibility = JavaVersion.VERSION_1_7

kotlinOptions {
jvmTarget = "1.6"
}
}

同样重要的是,代码不在 Android 模块中。正如预期的那样,我的 Android 模块不允许我使用该方法。

最佳答案

我知道这是一个老问题,但仍然可以帮助其他人。

您遇到的问题是因为您实际上是针对 jdk 编译代码,而这不是您的目标。并且该非常特殊的 jdk 包含流 API,因此可以正确编译。为了实现你的目标,你必须针对你的目标 jdk 进行编译。

Kotlin documentation为您提供 jdkHome 属性。所以你可以:

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jdkHome = 'target/jdk/home'
}
}

为了使解决方案与团队中的其他人兼容,您可以从 local.properties 文件中加载路径,该文件不应位于您的 vcs 中:

Properties localProperties = new Properties()
localProperties.load(project.rootProject.file('local.properties').newDataInputStream())

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jdkHome = "${localProperties.getProperty('targetjdk.dir')}"
}
}

关于java - 如何为 Kotlin 和 Gradle 设置 "sourceCompatibility"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44527615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com