Java 如何设置;sourceCompatibility“;为了科特林和格拉德尔?
我在Android应用程序上得到了Java 如何设置;sourceCompatibility“;为了科特林和格拉德尔?,java,android,gradle,kotlin,Java,Android,Gradle,Kotlin,我在Android应用程序上得到了java.lang.NoClassDefFoundError。我设法把这个问题孤立起来,打电话给他。问题是该方法适用于Java8,在某些设备中不可用,Kotlin/Gradle正在成功编译该方法 tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { sourceCompatibility = JavaVersion.VERSION_1_7 // Is it even r
java.lang.NoClassDefFoundError
。我设法把这个问题孤立起来,打电话给他。问题是该方法适用于Java8,在某些设备中不可用,Kotlin/Gradle正在成功编译该方法
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"
}
}
类似问题:
我的问题是。当我在项目中使用Java8SDK时,有没有办法给我一个编译错误?我曾尝试像下面这样手动设置Java1.7,但使用Java8的代码编译成功
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不是您的目标。而且非常特殊的jdk包含流API,因此可以正确编译。为了实现目标,必须针对目标jdk进行编译 Kotlin为您提供
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')}"
}
}
不确定是否相关。但是您使用的是哪个stdlib依赖项?它应该是
kotlin-stdlib
或kotlin-stdlib-jre7
,而不是kotlin-stdlib-jre8
@hotkey我正在使用kotlin-stdlib
,但即使使用kotlin-stdlib-jre7
,我也能够用Java8SDK编译代码。