Kotlin 1.2.10のintellijを使用して構成された最も単純な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プラグインのバグですか?
それはintellij設定での私のkotlinコンパイラ構成であることが判明しました。 Settings > Build, Execution, Deployment > Compiler > Kotlin Compiler
では、Target JVM version
という設定が1.8に設定されているはずです。
これは、MacでAndroid Studio 3.2を使用している場合に役立つと思います。
Kotlin Compiler Target JVMバージョンを変更するには、Android Studio-> Preferences-> Kotlin Compilerに移動し、ドロップダウンから選択してTarget JVMバージョンを変更する必要があります。
とにかく、私はまだ次のエラーが発生しています
JVMターゲット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()
}
これは、Project Settings > Modules > Kotlin
の下のプロジェクト設定でも設定されます。これは私の特定の問題でした...文字通り、私が最後に試したものです。
私の場合、コメントにあるものを含むすべての@alisabzevariオプションを試しましたが、うまくいきませんでした。
私の間違いはJavaファイルをsrc/<sourcset_name>kotlin/
フォルダーにも追加し、後でJavaファイルをkotlinファイルに変換しました。そして出来上がり!できます。
それが誰かを助けるかもしれません。