Eu tenho o projeto gradle mais simples configurado usando o intellij para kotlin 1.2.10. Aqui está meu arquivo 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"
}
E eu tenho uma interface java simples:
public interface MyMath {
static int myAbs(int input) {
return Math.abs(input);
}
}
Quando eu importo esta interface e tento chamar o myAbs
método, ele falha com este erro:
Error:(6, 12) Kotlin: Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'
Eu criei um aplicativo intellij kotlin e estava funcionando corretamente. É um bug no novo plug-in gradle do Kotlin?
gradle
intellij-idea
kotlin
Alisabzevari
fonte
fonte
Respostas:
Acho que isso pode ser útil para quem usa o Android Studio 3.2 no Mac.
Para alterar a versão da JVM de destino do compilador Kotlin, você deve ir para Android Studio -> Preferências -> Compilador Kotlin e, em seguida, alterar a versão da JVM de destino escolhendo no menu suspenso.
De qualquer forma, ainda estou recebendo o seguinte erro
RESOLVIDO
Adicionar o seguinte ao meu build.gradle resolveu o problema:
android { kotlinOptions { jvmTarget = '1.8' } }
Sobre esta e outras opções de configuração do Gradle: https://kotlinlang.org/docs/reference/using-gradle.html
Com Kotlin Gradle DSL:
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions (kotlinOptions as KotlinJvmOptions).apply { jvmTarget = JavaVersion.VERSION_1_8.toString() }
fonte
app
é gradle btw.Descobri que era a configuração do meu compilador kotlin nas configurações do Intellij. Em
Settings > Build, Execution, Deployment > Compiler > Kotlin Compiler
uma configuração chamadaTarget JVM version
deveria ter sido definida como 1.8.fonte
Settings -> Other Settings -> Kotlin Compiler -> Target JVM Version
Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'
Other Settings
na minha!Project Structure -> Facets -> Kotling -> Target Platform
Verifique se você tem as três coisas a seguir definidas:
kotlinOptions { jvmTarget = '1.8' }
Verifique as preferências de ideias relevantes
Verifique as facetas do projeto
fonte
Há uma propriedade gradle usada pelo plugin Kotlin que pode ser usada. Quando você adiciona
kotlin.setJvmTargetFromAndroidCompileOptions = true
ao seu
gradle.properties
arquivo. Quando você tem esta configuração em seubuild.config
android{ compileOptions { sourceCompatibility = 1.8 targetCompatibility = 1.8 } }
o problema deve ser resolvido.
fonte
sourceCompatibility
etargetCompatibility
configurado, mas a adição dekotlin.setJvmTargetFromAndroidCompileOptions = true
resolveu o problema para mim// Basta adicionar o código abaixo em seu Build gradle (Módulo: app)
compileOptions { sourceCompatibility = 1.8 targetCompatibility = 1.8 } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions { jvmTarget = "1.8" } }
fonte
Isso também é definido nas configurações do projeto, em
Project Settings > Modules > Kotlin
. Este era o meu problema específico ... literalmente a última coisa que tentei.fonte
Isso funcionou para mim no Gradle com Kotlin DSL:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile val compileKotlin: KotlinCompile by tasks compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
fonte
Não tenho certeza de por que isso funciona, mas você pode tentar alterar a configuração na própria ideia. Como o Gradle da linha de comando funciona, mas não ao compilar a partir do IntelliJ, esta provavelmente é a raiz.
Vá para Arquivo -> Estrutura do Projeto. Vá para a guia Projeto e certifique-se de que o SDK do Projeto é 8 (ou mais recente) e defina o
Project language level
para Java 8A configuração lá parece substituir o Gradle por algum motivo, então alterá-lo deve funcionar
fonte
Configurações> Build, Execution, Deployment> Compiler> Kotlin Compiler, uma configuração chamada Target JVM version deve ter sido definida como 1.8.
fonte
No meu caso, tentei todas as opções do @alisabzevari, incluindo as fornecidas no comentário, mas não funcionou,
erro meu Eu adicionei o arquivo java também na
src/<sourcset_name>kotlin/
pasta, depois converti o arquivo java para arquivo kotlin. e Voila! Funciona.Pode ser que ajude alguém.
fonte