我使用intellij为kotlin 1.2.10配置了最简单的gradle项目。这是我的build.gradle文件:
buildscript {
ext.kotlin_version = '1.2.10'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
group 'com.ali'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'kotlin'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
testCompile group: 'junit', name: 'junit', version: '4.12'
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
我有一个简单的java界面:
public interface MyMath {
static int myAbs(int input) {
return Math.abs(input);
}
}
当我导入此界面并尝试调用myAbs
方法时,它会因此错误而失败:
Error:(6, 12) Kotlin: Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'
我创建了一个intellij kotlin应用程序,它运行正常。这是新Kotlin gradle插件中的错误吗?
答案 0 :(得分:41)
我认为这对于在Mac上使用Android Studio 3.2的用户可能会有所帮助。
要更改Kotlin Compiler目标JVM版本,您应该转到Android Studio->首选项-> Kotlin Compiler,然后从下拉列表中选择更改目标JVM版本。
无论如何,我仍然遇到以下错误
在JVM target 1.6中禁止在Java接口中调用静态方法。用'-jvm-target 1.8'重新编译
已解决
在我的build.gradle中添加以下内容解决了该问题:
android {
kotlinOptions {
jvmTarget = '1.8'
}
}
关于此和其他Gradle配置选项:https://kotlinlang.org/docs/reference/using-gradle.html
使用Kotlin Gradle DSL:
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
(kotlinOptions as KotlinJvmOptions).apply {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
答案 1 :(得分:34)
原来,这是我在intellij设置中的kotlin编译器配置。在Settings > Build, Execution, Deployment > Compiler > Kotlin Compiler
中,名为Target JVM version
的设置应设置为1.8。
答案 2 :(得分:16)
Kotlin插件有一个gradle属性可以使用。添加时
gradle.properties
到您的build.config
文件。
当您在android{
compileOptions {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
}
Nagios /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
需要解决的问题。
答案 3 :(得分:8)
答案 4 :(得分:2)
这在Kodlin DSL的Gradle中对我有用:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
答案 5 :(得分:1)
不太确定为什么会这样,但您可以尝试更改Idea本身的设置。由于命令行中的Gradle可以工作,但是从IntelliJ构建时,这可能不是根目录。
转到文件 - >项目结构。转到项目选项卡,确保Project SDK为8(或更新),并将Project language level
设置为Java 8
由于某种原因,其中的配置似乎会覆盖Gradle,因此更改它应该可以正常工作
答案 6 :(得分:1)
这也可以在项目设置的Project Settings > Modules > Kotlin
下进行设置。这是我的特定问题……实际上是我尝试的最后一件事。
答案 7 :(得分:1)
///只需将以下代码添加到Build gradle(Module:app)
compileOptions {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jvmTarget = "1.8"
}
}
答案 8 :(得分:0)
就我而言,我尝试了所有@alisabzevari选项(包括注释中给出的选项),但没有用,
我的错误我也在src/<sourcset_name>kotlin/
文件夹中添加了Java文件,后来我将Java文件转换为kotlin文件。和瞧!有用。
也许会帮助某人。
答案 9 :(得分:0)
设置>构建,执行,部署>编译器> Kotlin编译器,名为Target JVM version的设置应设置为1.8。
答案 10 :(得分:0)
通过编辑build.gradle.kts
val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = "1.8"