Tengo el proyecto gradle más simple configurado usando intellij para kotlin 1.2.10. Aquí está mi archivo 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"
}
Y tengo una interfaz java simple:
public interface MyMath {
static int myAbs(int input) {
return Math.abs(input);
}
}
Cuando importo esta interfaz e intento llamar al myAbs
método, falla con este 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'
He creado una aplicación intellij kotlin y estaba funcionando correctamente. ¿Es un error en el nuevo complemento gradle de Kotlin?
gradle
intellij-idea
kotlin
alisabzevari
fuente
fuente
Respuestas:
Creo que esto podría ser útil para aquellos que usan Android Studio 3.2 en Mac.
Para cambiar la versión de JVM de destino del compilador de Kotlin, debe ir a Android Studio -> Preferencias -> Compilador de Kotlin y luego cambiar la versión de JVM de destino eligiendo en el menú desplegable.
De todos modos, sigo recibiendo el siguiente error
RESUELTO
Agregar lo siguiente a mi build.gradle resolvió el problema:
android { kotlinOptions { jvmTarget = '1.8' } }
Acerca de esta y otras opciones de configuración de Gradle: https://kotlinlang.org/docs/reference/using-gradle.html
Con Kotlin Gradle DSL:
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions (kotlinOptions as KotlinJvmOptions).apply { jvmTarget = JavaVersion.VERSION_1_8.toString() }
fuente
app
es gradle por cierto.Resultó que era mi configuración del compilador kotlin en la configuración de intellij. En
Settings > Build, Execution, Deployment > Compiler > Kotlin Compiler
una configuración llamadaTarget JVM version
debería haberse establecido en 1.8.fuente
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
en el mío!Project Structure -> Facets -> Kotling -> Target Platform
Compruebe si tiene las siguientes tres cosas configuradas en la idea:
kotlinOptions { jvmTarget = '1.8' }
Verifique las preferencias de Idea relevantes
Ver las facetas del proyecto
fuente
Hay una propiedad gradle utilizada por el complemento Kotlin que se puede usar. Cuando agregas
kotlin.setJvmTargetFromAndroidCompileOptions = true
a su
gradle.properties
archivo. Cuando tenga esta configuración en subuild.config
android{ compileOptions { sourceCompatibility = 1.8 targetCompatibility = 1.8 } }
El problema debe resolverse.
fuente
sourceCompatibility
ytargetCompatibility
configurado, pero al agregarlokotlin.setJvmTargetFromAndroidCompileOptions = true
resolvió el problema para mí// Simplemente agregue el siguiente código en su Build gradle (Módulo: aplicación)
compileOptions { sourceCompatibility = 1.8 targetCompatibility = 1.8 } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions { jvmTarget = "1.8" } }
fuente
No estoy seguro de por qué funciona esto, pero puede intentar cambiar la configuración en la propia Idea. Dado que Gradle desde la línea de comandos funciona, pero no cuando se construye desde IntelliJ, esta es probablemente la raíz.
Vaya a Archivo -> Estructura del proyecto. Vaya a la pestaña Proyecto y asegúrese de que Project SDK sea 8 (o más reciente) y configure el
Project language level
en Java 8La configuración allí parece anular a Gradle por alguna razón, por lo que cambiarla debería funcionar
fuente
Esto también se establece en la configuración del proyecto, en
Project Settings > Modules > Kotlin
. Este fue mi problema específico ... literalmente lo último que intenté.fuente
Esto funcionó para mí en Gradle con Kotlin DSL:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile val compileKotlin: KotlinCompile by tasks compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
fuente
En mi caso, probé todas las opciones de @alisabzevari, incluidas las dadas en el comentario, pero no funcionó,
mi error agregué el archivo java también en la
src/<sourcset_name>kotlin/
carpeta, luego convertí el archivo java al archivo kotlin. ¡y voilá! Funciona.Puede que ayude a alguien.
fuente