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 myAbsmé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
appes 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 Compileruna configuración llamadaTarget JVM versiondebería haberse establecido en 1.8.fuente
Settings -> Other Settings -> Kotlin Compiler -> Target JVM VersionCalls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'Other Settingsen el mío!Project Structure -> Facets -> Kotling -> Target PlatformCompruebe 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 = truea su
gradle.propertiesarchivo. Cuando tenga esta configuración en subuild.configandroid{ compileOptions { sourceCompatibility = 1.8 targetCompatibility = 1.8 } }El problema debe resolverse.
fuente
sourceCompatibilityytargetCompatibilityconfigurado, pero al agregarlokotlin.setJvmTargetFromAndroidCompileOptions = trueresolvió 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 levelen 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