¿Cómo configurar la compatibilidad de destino jvm de la tarea compileJava (11) y la tarea 'compileKotlin' (1.8) con la misma versión de Java en build.gradle.kts?
Construir.gradle.kts
buildscript {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
dependencies {
classpath ("com.android.tools.build:gradle:7.0.2")
classpath ("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30")
classpath("gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:${Versions.spotbugsGradlePluginVersion}")
classpath("se.bjurr.violations:violations-gradle-plugin:${Versions.violationsVersion}")
}
}
//android {
// compileOptions {
// sourceCompatibility = JavaVersion.VERSION_11
// targetCompatibility = JavaVersion.VERSION_11
// }
//
// kotlinOptions {
// jvmTarget = JavaVersion.VERSION_11.toString()
// }
//}
plugins {
`maven-publish`
`java-gradle-plugin`
`kotlin-dsl`
id ("io.gitlab.arturbosch.detekt") version ("1.18.1")
}
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
dependencies {
compileOnly(gradleApi())
testImplementation(gradleTestKit())
testImplementation("junit:junit:${Versions.jUnitVersion}")
}
val generatedSources = tasks.register<GenerateVersionsFileTask>("generateSources")
Obtuve el siguiente error:
ERROR: tarea 'compileJava' (el objetivo actual es 11) y tarea 'compileKotlin' (el objetivo actual es 1.8) La compatibilidad del objetivo jvm debe establecerse en la misma versión de Java.
Cuando descomento android {}
, obtengo:
Error: errores de compilación del script:
Line 15: android { ^ Unresolved reference: android
También debemos prestar atención a la versión que muestra el error . En mi caso fue:
Causado por: org.gradle.api.GradleException: tarea 'compileDebugJavaWithJavac' ( el objetivo actual es 1.8 ) y tarea 'compileDebugKotlin' ( el objetivo actual es 17 ). La compatibilidad del objetivo jvm debe establecerse en la misma versión de Java.
Lo que significa que el IDE de Android Studio está usando 17 (puede encontrarlo en Menú Archivo->Estructura del proyecto->Ubicación del SDK->Ubicación del JDK)
Y estás usando 1.8 en tus archivos gradle.
Entonces necesitas cambiar
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
y
kotlinOptions {
jvmTarget = '1.8'
}
a
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
y
kotlinOptions {
jvmTarget = '17'
}
Tenga en cuenta que
Como el error mostraba 17, también cambié a 17.
Esto sucedió cuando actualicé gradle a 8.0.
Tenga cuidado con los problemas de liberación. Por favor haga una copia de seguridad antes de realizar el procedimiento. Puede enfrentar problemas en la versión aab.
Asegúrese de verificar la versión de apk después de realizar este procedimiento, porque R8 espera cosas como esta
Puede configurar la versión de Java para Java con
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
o alternativamente:
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(11))
}
y para kotlin con:
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions {
jvmTarget = "11"
}
}
Todas las muestras están en gradle kotlin dsl.
La respuesta de @Marian no me ayudó del todo.
Termino configurando lo siguiente en la aplicación build.gradle
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget=11
}
...
}
Para tener la "misma versión de Java" tanto en "Java como en Kotlin" ,
simplemente modifique su archivo build.gradle de esta manera (ejemplo dado para Java 11):
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
...
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
// New syntax (credit goes to ʍѳђઽ૯ท in comment)
kotlin {
jvmToolchain(11)
}
/*
FYI: Old syntax:
kotlin {
jvmToolchain {
languageVersion.set(JavaLanguageVersion.of("11"))
}
}
FYI: Deprecated syntax:
kotlinOptions {
jvmTarget = "11"
}
*/
...
}
Mi configuración:
Gradle:
- Complemento de Gradle para Android: com.android.tools.build:gradle:7.4.1
- Gradle: 7.5 (a partir de ./gradle/wrapper/gradle-wrapper.properties)
Kotlin:
- Complemento de Android Kotlin: 221 (221-1.8.0-release-for-android-studio-AS5591.52)
(consulte https://kotlinlang.org/docs/whatsnew18.html#install-kotlin-1-8-0 ) - Complemento Kotlin Gradle: org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0
Acerca de la nueva sintaxis :
consulte Nuevo método para la configuración de la cadena de herramientas JVM
NB:
Más información sobre la configuración de Kotlin al respecto está disponible aquí:
https://blog.jetbrains.com/kotlin/2021/11/gradle-jvm-toolchain-support-in-the-kotlin-plugin/