为什么kotlin gradle插件无法用1.8的目标构建?
我有最简单的gradle项目配置使用intellij kotlin 1.2.10。 这是我的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插件中的错误吗?
原来,这是我在intellij设置中的kotlin编译器配置。 在Settings > Build, Execution, Deployment > Compiler > Kotlin Compiler
中,称为Target JVM version
的设置应该已设置为1.8。
不太清楚这是为什么会起作用,但你可以尝试改变意见本身的设置。 既然Gradle从命令行工作,而不是从IntelliJ构建,这可能是根源。
转到文件 – >项目结构。 转到Project选项卡,确保Project SDK是8(或更新),并将Project language level
设置为Java 8
在那里的配置似乎重写Gradle出于某种原因,所以改变它应该工作