可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have the simplest gradle project configured using intellij for kotlin 1.2.10. Here is my build.gradle file:
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"
}
And I have a simple java interface:
public interface MyMath {
static int myAbs(int input) {
return Math.abs(input);
}
}
When I import this interface and try to call myAbs
method it fails with this error:
Error:(6, 12) Kotlin: Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'
I have created an intellij kotlin app and it was working correctly. Is it a bug in new Kotlin gradle plugin?
回答1:
I think this could be helpful for those using Android Studio 3.2 on Mac.
To change the Kotlin Compiler Target JVM version you should go to Android Studio -> Preferences -> Kotlin Compiler and then change the Target JVM version choosing from the dropdown.
Anyway, I'm still getting the following error
Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'
SOLVED
Adding the following to my build.gradle solved the problem:
android {
kotlinOptions {
jvmTarget = '1.8'
}
}
About this and other Gradle configuration options: https://kotlinlang.org/docs/reference/using-gradle.html
With Kotlin Gradle DSL:
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
(kotlinOptions as KotlinJvmOptions).apply {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
回答2:
It turned out that it was my kotlin compiler configuration in intellij settings. In Settings > Build, Execution, Deployment > Compiler > Kotlin Compiler
a setting called Target JVM version
should have been set to 1.8.
回答3:
Please check if you have the following three stuff set in idea:
- kotlin options in build.gradle
kotlinOptions {
jvmTarget = '1.8'
}
Check the relevant Idea preferences
Check the project Facets
回答4:
Not quite sure why this works, but you could try changing the setting in the Idea itself. Since Gradle from the command line works, but not when building from IntelliJ this is probably the root.
Go to File -> Project Structure. Go to the Project tab and make sure Project SDK is 8 (or newer) and set the Project language level
to Java 8
The config in there seems to override Gradle for some reason, so changing it should work
回答5:
This is also set in project settings, under Project Settings > Modules > Kotlin
. This was my specific problem... literally the last thing I tried.
回答6:
//Just add the below code in your Build gradle(Module:app)
compileOptions {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jvmTarget = "1.8"
}
}
回答7:
In my case, I tried all @alisabzevari options including given in comment, but It didn't work,
my mistake I added java file also in src/<sourcset_name>kotlin/
folder, later I converted java file to kotlin file. and Voila! It works.
May be it will help somebody.
回答8:
There is a gradle property used by Kotlin plugin which can be used. When you add
kotlin.setJvmTargetFromAndroidCompileOptions = true
to your gradle.properties
file.
When you have this configuration on your build.config
android{
compileOptions {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
}
problem sould be solved.